构造函数

什么是构造函数

在前面我们讲了类如何实例化对象,是通过new关键字
//实例化一个cat对象
Cat cat = new Cat();

构造函数的作用

构造函数的作用就是创建类或结构的实例,在实例化对象的时候,也
就是new Cat()时会调用.
构造函数可以快速的帮我们构建对象,一般来说,我们在构造函数中
做些初始化字段的功能

构造函数的特点

>> 构造函数(方法)必须与类重名
>> 构造函数没有返回值,但可以有形参
>> 构造函数可以有重载
>> 如果一个类中没有构造函数,系统会为我们自动添加一个无参数
的构造函数
>> 如果一个类中存在一个或多个构造函数重载,此时系统不会在为
我们的类自动生成构造函数

特别注意!!!!!

假如我们把之前无参数的构造函数删掉,让我们的类保持上一个带有
参数的构造函数时,此时运行程序会报错.
Person p1 = new Person();
报错因为这一一句代码,原因是如果一个类中存在一个或多个构造函
数重载,此时系统不会在为我们的类自动生成无参数构造函数,但是
我们又通过无参数构造函数去实例化对象,相当于调用了一个不存在
的方法

------------------------------------------------------------------------------------------------------------------------

面向对象三大特性

封装

封装是实现面向对象程序设计的第一步,封装就是将数据或函数等集
合在一个个的类中。 找到变化并且把它封装起来,你就可以在不
影响其它部分的情况下修改或扩展被封装的变化部分,这是所有设
计模式的基础,就是封装变化,因此封装的作用,就解决了程序的
可扩展性。

继承

继承用于创建可重用,扩展和修改在其他类中定义的行为的新类.
其成员被继承的类陈伟”基类”,继承这些成员的类称为”派生类”
派生类只能有一个直接基类.
继承有可传递行,即A继承自B,B继承自C,那么A会继承B和C声明的
成员

继承的特点总结

>> 在程序中使用:表示继承 class A:B
>> 子类可以继承父类中内公开会受保护的成员变量
>> 继承具有传递性
>> 派生类可以赋值给基类,但是基类不能赋值给派生类
>> 子类成员变量,父类不能拥有
>> 子类成员变量与父类成员变量重复,覆盖父类成员变量

多态

当派生类从基类继承时,它会获得基类公开的所有方法,字段,属性以
及时间.派生类可以选择:
>> 继承最接近基类方法而不重写它
>> 重写基类中的虚拟成员
>> 定义隐藏基类实现的成员的新非虚实现

关于多态

其实之前学的方法重载也属于多态的一种表现形式.
在继承关系中,体现多态的是方法重写

方法重写

方法重写顾名思义,就是重写基类的虚方法.在方法重写中,基类的虚
方法用virtual修饰,子类重写时使用override.严格意义上来讲
virtual和override必须成对出现.
如果在基类中声明了虚方法,子类没有使用override,此时不属于方
法重写,而是方法覆盖.如果基类没有虚方法,此时子类是不可以使用
override关键字的!

方法重写需要注意的地方

>> 不能重写父类中用sealed修饰的方法
>> 不能重写父类中用static修饰的方法
>> 如果父类中存在抽象方法,此时子类必须重写

-----------------------------------------------------------------------------------------------------------------------

应用

using System;

namespace Lesson09_1
{
class MainClass
{
public static void Main (string[] args)
{
// Person p = new Person ();
// Console.WriteLine (p.name);
//
// Person p2 = new Person ();

// Person p1 = new Person ("阿三");

// B b = new B ();
// A b2 = new B ();//子类构造父类对象
// //object a = new A();
// B b3 = (B)b2;

// B b = new B ();
// b.name = "我是b";//直接使用继承子A的字段
// Console.WriteLine (b.name);
// b.Eat();

//创建三个门派,古墓派,全真教,华山派,每个门派至少有两个特征,分
//别是武学名称,武学威力系数.以及一个攻击行为.
Gumu gm = new Gumu ("玉女心经", 100);
Quanzhen qz = new Quanzhen ("全真剑法", 50);
Huashan hs = new Huashan ("独孤九剑", 500);
gm.Attak ();
qz.Attak ();
hs.Attak ();

}
}
}

-----------------------------------------------------------------------------------------------------------------------

A类

using System;

namespace Lesson09_1
{
//所有的类都会继承子Object
//Object是所有类的基类
public class A
{
public string name;//字段会被子类继承
private int age;//私有字段是可以被子类继承的,但是子类无法访问
public A ()
{
Console.WriteLine ("A的无参构造函数");
}
public A(string name){
this.name = name;
Console.WriteLine ("A中有name参数构造函数");
}
public void Eat(){
Console.WriteLine ("A吃X");
}
}
}

-----------------------------------------------------------------------------------------------------------------------

B类

using System;

namespace Lesson09_1
{
public class B:A
{
//调用B的构造函数的时候,会去寻找B的基类的无参构造函数
public B ()
{
Console.WriteLine ("B的无参构造函数");
}
public B(string name){
Console.WriteLine ("B中的构造函数");
this.name = name;
}
//使用new关键字可以覆盖基类中相同类型的方法
public new void Eat(){
Console.WriteLine ("B吃X");
//可以使用base关键字调用基类方法
base.Eat ();
}
}
}

-----------------------------------------------------------------------------------------------------------------------

School类

using System;

namespace Lesson09_1
{
public class School
{
private string gongFuName;
private float gongFuPower;

public School(string name,float power){
gongFuName = name;
gongFuPower = power;
}

public void Attak(){
Console.WriteLine ("用{0},对敌人造成了{1}伤害",gongFuName,gongFuPower);
}
}
}

-----------------------------------------------------------------------------------------------------------------------

Gumu类

using System;

namespace Lesson09_1
{
public class Gumu:School
{
public Gumu (string name,float power):base(name,power)
{

}
}
}

-----------------------------------------------------------------------------------------------------------------------

Quanzhen类

using System;

namespace Lesson09_1
{
public class Quanzhen:School
{
public Quanzhen (string name,float power):base(name,power)
{

}
}
}

-----------------------------------------------------------------------------------------------------------------------

Huashan类

using System;

namespace Lesson09_1
{
public class Huashan:School
{
public Huashan (string name,float power):base(name,power)
{

}
}
}

C#Lesson09 面向对象相关推荐

  1. 【AJAX】JavaScript的面向对象

    Ajax中后端数据返回后需要前端通过JavaScript来实现动态数据更新的问题.所以,在Ajax中加深了一遍JavaScript面向对象的印象. 基础部分: JavaScript中创建对象并简单对象 ...

  2. 面向过程(或者叫结构化)分析方法与面向对象分析方法到底区别在哪里?

    AutoSAR入门到精通系列讲解 将从2019年开始更新关于AutoSAR的知识,从入门到精通,博主xyfx和大家一起进步 雪云飞星 ¥29.90 去订阅 简单地说结构化分析方法主要用来分析系统的功能 ...

  3. 2021年大数据常用语言Scala(二十八):scala面向对象 MAVEN依赖和类

    目录 scala面向对象 MAVEN依赖 类 - 掌握 创建类和对象 - 掌握 getter/setter - 了解 类的构造器 - 掌握 scala面向对象 MAVEN依赖 <?xml ver ...

  4. php面向对象程序设计,PHP面向对象程序设计类的定义与用法简单示例

    本文实例讲述了PHP面向对象程序设计类的定义与用法.分享给大家供大家参考,具体如下: class Person { private $name; private $sex; private $age; ...

  5. java面向过程和面向对象

    面向过程(Procedure Oriented):说的是功能的行为 面向对象(Object Oriented,简称OO):说的是功能的对象 面向过程理解: 当学习java的时候先了解java语言优良的 ...

  6. day22_面向对象

    面向过程: 优点是:极大的降低了写程序的复杂度,只需要顺着要执行的步骤,堆叠代码即可. 缺点是:一套流水线或者流程就是用来解决一个问题,代码牵一发而动全身. 面向对象: 优点是:解决了程序的扩展性.对 ...

  7. java面向对象-------静态初始化块

    1.构造方法用于对象的初始化!静态初始化块,用于类的初始化操作,在静态初始化块中不能直接访问非static成员. package java面向对象; /** * 测试静态初始化块 */public c ...

  8. 7.12 其他面向对象设计原则3: 依赖倒置原则DIP

    其他面向对象设计原则3: 依赖倒置原则DIP  The Dependency Inversion Principle 7.1 依赖倒置原则DIP The Dependency Inversion P ...

  9. Day-16 面向对象03 类与类之间的关系

    一.类与类之间的依赖关系 我用着你,但是你不属于我,这种关系是最弱的,比如,公司和雇员之间,对于正式员工,肯定要签订劳动合同,还得小心伺候着,但是如果是兼职,那无所谓,需要了你就来,不需要你就可以拜拜 ...

最新文章

  1. Redis的安装及创建节点、部署群集
  2. ChipScope Pro内核生成器应用实例
  3. 系统架构师-基础到企业应用架构-系统设计规范与原则[上篇]
  4. optee中User TA的加载和运行
  5. internship weekly task update
  6. EditText 输入类型 android:inputType=quot;参数类型quot;
  7. sudo: apt-get:找不到命令”的解决方法
  8. SaltStack 模块学习之拷贝master服务器上文件和目录到minion服务器
  9. java三种循环结构_Java的三种结构(循环结构)
  10. 从 Chrome 谈到 Adobe
  11. 把握linux内核设计思想系列【转】
  12. 百战程序员JavaWeb系列教程-监听器视频教程
  13. 安装SQL Server 2012时报.net framework 3.5错误
  14. 惠斯特电桥平衡条件的证明
  15. c语言中e什么作用是什么,c语言中%e是什么意思
  16. 理性分析三星盖乐世炸弹7
  17. 虚拟机或公有云搭建wordpress博客
  18. Golang调用mssql存储过程
  19. 计算机网络基础以及linux面试知识点总结
  20. C语言实现Dijkstra算法(求解两点之间最短路径问题)

热门文章

  1. 申宝正规股票下周市场将迎来抛压
  2. 计算机专业应届生英语自我介绍,计算机应届毕业生求职自我介绍
  3. ipad 的android模拟器,iPad Simulator:免费Web版iPad模拟器
  4. SQL 语句优化原则:
  5. 鲨鱼听书 — Android和iOS免费有声小说畅听
  6. MySQL 数据库和表管理
  7. DevOps背景下的分合之事
  8. 一言不合就越狱!盘古团队越狱 iOS 10
  9. python 电脑文件变动提醒_Python实现定时弹窗提醒
  10. 【Axure篇】(三)Axure RP9设置单击显示再次单击隐藏