继承和组合
复用代码的方式:继承和组合
继承:复用代码的一种方式,可以复用代码或概念。
组合:复用代码,不能复用概念。
在C#中,Object类是一切类的直接父类或间接父类。
子类拥有所有父类的非私有成员。
构造函数不能继承
创建子类时,自动调用父类的构造函数,并且父类中的先执行
概念复用:
Dog dog = new Dog();
Animal dog = new Dog();
为什么需要继承/继承的优点
- 复用代码,开发效率高;
- 复用概念,实现类的层次性管理。
继承的缺点
特点:父类的改变直接影响了所有的子类,而不需要通知子类。
需要这个特点:耦合度高 优点
不需要这个特点:耦合度高 缺点
耦合度高:父类的改变直接影响到所有的子类,而不需要通知子类
建议:
继承层次不要太深,三层即可
尽量选择抽象类来继承 父类抽象类!
为什么需要构造方法?
只要类型需要创建对象,都需要构造方法,因为构造方法是创建对象的唯一通道.
在类中可以定义构造函数,可以不定义构造函数,如果没有定义,
编译器会自动创建一个无参构造函数
构造方法的作用 1》创建对象 唯一途径 【必须】
2》初始化字段 【可选】
为什么要重载构造方法?
//A:构造方法在创建对象的同时,并为对象成员做初始化,通过传递的参数为成员赋值
**一个类可以有多个构造方法。
**当希望得到的对象的初始状态不同,可以使用重载构造方法。
构造方法之间可不可以互相调用
可以,本类构造方法互相调用通过this关键字,
子类调用父类的构造方法通过base关键字
哪种情况适合用继承组织类的关系 is成立!【技巧】
两个或更多个类从概念上是一致的
设计原则:仅仅为了复用代码【复用】,优先组合 实际开发组合用的多!
技巧: A B类 继承 is A is B ,B is A 继承
组合 has
访问修饰符
public->internal->protected->private
internal:同一个项目中可以访问,不能跨项目;
protected:自己类或者派生类可以访问。
Class默认修饰符为internal。
关于访问修饰符的注意事项
- 在命名空间中定义的元素无法显示的声明private,protected或protected internal;
- 通过base访问父类中的protected, public, internal;
- 通过new对象来访问public, internal;