学习OOP——三大特性之一“继承”的总结

"僧问:不历僧只获法身,请师直指。师云:子承父业。"@-@/

OOP三大基本特性之一“继承”,存在父类或接口与子类的关系,而判断谁是父类谁是子类在于关键词extends.

对于子类来说,父类只能有一个,而父类下面可以有多个子类,子类可以继承父类的方法或者属性,必定涉及到当前对象与父类对象的区别。

this表示在当前构造方法中调用其他的重载构造;而super表示在子类构造中调用父类的构造。

而this和super必须位于当前构造方法的第一句,否则就会报错。

 

 尽管子类可以继承父类的方法与属性,但是也不是能完全继承的,以下三个属于不能继承的范畴:

  (1)私有的  privaate

  (2)构造方法 constuctor

  (3)非同包子类受保护类型 protected

讲到了修饰符,顺便介绍一下四个基本修饰符的访问权限控制:

其中public修饰符可以在所有类型中被访问;

而protected只能在同包或者不同包的子类被访问;

default只能在同包中被访问;

private只能在同类中被访问。

在父类与子类之间,存在自动类型的转换与强制类型的转换

  其中自动类型转换指的是父类引用指向子类的对象

看一个简单的例子:

  Water为父类,Xiaoming为子类,Xiaoming的两种对象为drink 和 eat,当父类引用指向子类对象时,eat 并没有表现出来.

 

 

这就是向上转型,父类的引用可以直接指向子类的对象,但是子类单独定义的其他方法会丢失,如子类中"eat watermelon"并没有输出。

而向下转型,指的是将子类对象赋值给父类引用,再强行转回子类,这时子类定义的其他方法就不会丢失了。

 

  这里在向上转型的基础上作出了一点改变,利用instanceof进行强制转换就可以保证子类方法不会丢失。

    

原文地址:https://www.cnblogs.com/afeiiii/p/12977268.html