C#笔记誊录
面向对象的三大特征: 封装性 继承性 多态性
一.继承:类与类的关系
为什么会用继承:减少代码重复 优化 空间内存 实现多态
class 基类 { //基类成员 } class 子类:基类 { //子类成员 }
判断继承关系 用进行进行判断--》子类对象 is 父类成员
例如 诺基亚手机 诺基亚280 诺基亚板砖007
继承特征 :1.单根性 一个只能继承自一个类 不可能继承俩个类
2.传递性 爷爷 父亲 孙子
3.派生于object根类(c#范围) c#里面的所有成员都来源于object 用于实现多态
注意: 1.继承中构造函数的问题 其实就是执行顺序
2.可以手动添加一个无参构造方法
3.访问修饰符
继承练习:
写一个student类 姓名 性别 年龄 hello方法与teacher类 姓名 性别 年龄 工资 hello方法 通过构造方法为成员赋初值 说hello
class student { private string _name; private string _age; private string _gender;//三个字段填充类的信息 public Student (string name ,int age ,char gender)//方法给三个字段赋值 –->4 { _name=name; _age=age; _gender=gender; } public string Name { get{return _name;} } public int Age { get {return _age;} } public char Gender { get {return _gender} } //三个属性限制访问级别 为了数据安全 }
class Teather : Student { private int _score; public Teacher(string name , int age ,char gender , int score): base (name ,age ,gender)—->3 -->5 { _score =score; } public void Hello() -->7 { Console.WriteLine("大家好,我叫{0},今年{1}岁了,我是{2}生,我这次考了{3}分",Name,Age,Gender,_Score); -->8 } public int Score { get {return _Score;} } } class Pregram { static void Main(string [ ] args ) { -->1 Teacher tea1= new Teacher ("张三 ",19,‘男‘,95); -->2 -->6 stu1.Hello(); Console.ReadKey(); -->9 } }
解析代码:
public Teacher(string name , int age ,char gender , int score)//定义子类构造方法
: base (name ,age ,gender) 调用父类方法 为什么不这样写 base (string name ,int age ,char gender) 因为name已经定义过了如果写string name 有类型和变量 这就是定义 而不是传参
base : 如果这里你不用base调用父类构造方法为子类赋初值,那你只有自己手动在子类构造方法里面为子类赋初值例子如下:
base._name-name; this._age=age; this.gender=gender;
注意:这里的base和this没区别 在字段前加base和this只要不会由编译器误解给程序走看的。
上面代码涉及构造方法(继承中)的执行顺序:
1.调用子类构造方法时,先调用父类构造方法 这里的base是在调用父类构造方法 base后面的参数 name,,age,gender应该和4参数对应
2.private的限制 类里面class{}大括号范围
二.继承中关于构造方法的调用this和base区别
this : 表示当前类 ,表示当前构造方法 --》解析:指定先调用哪一个当前类的构造方法就一个类里面(变化在一个类)
base:表示父类,父类构造方法--》解析:指定首先调用哪一个父类构造方法(变化在子类和父类 俩个类或多个类)
构造方法不一样你创建出来的对象就是不一样
this代码示例如下:
温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/66849.html