继承的最大好处就是为了实现代码的复用。那么,子类到底从父类得到的什么呢?
实例成员
父类的private成员不会被子类继承,子类不能访问。但是子类对象的确包含父类的私有成员。
父类的 包访问成员 继承为子类的包访问成员。就好像他们直接定义在子类中一样。
父类的 protected 成员继承为子类的protected 成员。就好像他们直接定义在子类中一样。
父类的 public 成员继承为子类的public 成员,就好像他们直接定义在子类中一样。
实例方法
继承到的实例方法在子类中可以直接被使用,还需重点理解是方法的重写和重载。
重写override
一个继承链中,父类的方法对于子类来说具有相同的语义,但是不同的细节操作,因此子类需要override父类的这个方法以满足自己的需求。
注意的点:
1、方法名,参数表一定和父类中的相同,返回类型相同,或者是子类。
1、访问权限一定不低于父类的实例方法
2、抛出的异常一定是父类方法抛出的异常相同,或者子类。
如果拿C++和java对比,那么java中的实例方法默认都是virtual的(java中没有virtual这个key word),因此在java中,子类可以直接重写父类方法的任何非final实例方法,但是在C++中,除非父类使用virtual标记一个方法为虚方法,子类才可以override这个方法。
对于重写的方法,javac是不能确定的具体要调用那个类的方法,而是产生特殊的字节码让jvm去动态决定什么方法。这个就是所谓的前期绑定和后期绑定的差异。
网友评论


