继承、多态、接口、抽象的特点

继承的优缺点 :
优点 :

新的实现很容易,因为大部分是继承而来的 
很容易修改和扩展已有的实现 

提高了代码的复用性

让类与类之间产生了关系,是“多态性”的前提

缺点:
打破了封装,因为基类向子类暴露了实现细节 
白盒重用,因为基类的内部细节通常对子类是可见的 
当父类的实现改变时可能要相应的对子类做出改变 
不能在运行时改变由父类继承来的实现 
由此可见,组合比继承具有更大的灵活性和更稳定的结构,一般情况下应该优先考虑组合。

 

 

有当下列条件满足时才考虑使用继承: 
子类是一种特殊的类型,而不只是父类的一个角色 
子类的实例不需要变成另一个类的对象 
子类扩展,而不是覆盖或者使父类的功能失效

 

 

多态的优缺点:

优点

A:提高了代码的维护性(继承保证) 
B:提高了代码的扩展性(由多态保证)

是提高了代码的扩展性。比如上面的例子中,如果添加了Pig,Mouse等动物,函数DoSomething()仍然可以使用。

弊端

是不能使用子类中的特有的方法。比如上面例子中,Dog和Cat的共有方法是Eat,这样Animal中仅仅能有Eat,而不能有其它。

多态的前提,是父类和子类之间有继承关系,且子类中方法覆盖了父类中方法。

 

 

向上转型:Fu f = new  Zi();

向下转型:Zi z = (Zi)f; //要求该f必须是能够转换为Zi的。

 

 

抽象的特点:

1 如果定义了抽象方法,那么必须定义抽象类;如果定义了抽象类,则不一定有抽象方法。抽象方法和抽象类用abstract关键字修饰。

2 抽象类不能实例化,也就是说不能用new关键字创建对象。

3 只有当子类覆盖了“所有”的抽象方法后,子类才能实例化。否则,子类仍然是一个抽象类。

4 抽象类是基于具体类向上抽取得到的。

 

 

接口的特点:

1 接口不能直接实例化,需要有子类,子类才可能实例化。

2 当子类覆盖了接口中所有抽象函数的时候,子类才可以实例化。

3 父类和子类的关系,可以用“继承”来形容;接口和子类的关系,可以用“实现”来形容。

猜你喜欢

转载自blog.csdn.net/Mr__Guo/article/details/81780060