继承的特点:
1)继承主要形成IS-A的关系,例如人类IS-A哺乳类。但是要注意这种关系的单向的。所以不能反过来说哺乳类IS-A人类。
2)继承从上而下是逐层具体化过程
3)层与层的特性是向下传递的(人具有哺乳类的特性,同样具有上层脊椎动物的特征,同样具有最上层动物的特征)
继承的定义:
继承的类称为子类、派生类。被继承的类称为父类或基类。通过继承,子类就获得了父类的属性和方法。同时子类也可以通过加入新的属性和方法或者修改父类的属性和方法(暂时不理解)建立新的类的层次。
不易理解的点:
1)BIrd bird【主类】 = new Chicken()【次类】;
bird.ShowTipy() --这种情况下应该是调用Chicken的方法(因为这里采用的是关注对象原则,方法的要点是,如果创建的对象是子类则是子类,反之...)
2)Bird bird2 = new Chicken();
Chicken chicken = new Chicken();--这种情况下应该采取就近原则(即是Chicken的属性方法)
接口的特点:
1)抽象类适合于有族层概念的类间关系 ,而接口最适合为不同的类提供通用功能。
2)接口着重于CAN-DO关系类型,而抽象类则偏重于IS-A式的关系。
3)接口多定义对象的行为,抽象多定义对象的属性。
4)版本式的应该多定义成抽象类型的,比如当你创建来狗类,牛类,那么应该考虑抽象出动物类来应对以后可能要出项马类,鸡类的问题(向接口中添加新成员则会强制要求修改所有的子类,重新编译。)
继承的毒瘤体现:
1)继承可能造成子类的无限膨胀,不利于体系的维护和安全。
2)因为继承子类的多样化和层次的复杂化,无可避免的会出现对父类的无效继承或者有害继承。
3)继承的子类对象确定于编译期,无法满足需要运行期确定的情况,而类聚合解决了此问题。
继承总结:
1)密封类不可以被继承(泄露信息)
2)继承关系中,我们更多的关注其共性而不是特性,因为共性是层次复用的基础,特性是系统拓展的基点。
3)抽象单继承,接口多继承。
3)从宏观来看,继承关注与共性,多态关注与差异性。
4)继承的层次应该控制的不要过量,否则维护会耗费很大的体力。
5)原则:多组合,少继承;低耦合,高内聚;