子类能继承父类的什么
(1)构造方法,构造方法无论私有还是非私有,子类都无法继承
(2)成员变量,无论私有还是非私有,子类都可以继承,如果是私有的,子类虽然继承,但不能直接调用
(3)成员方法,虚方法可以继承,而非虚方法则不能
关于虚方法表:当继承链过长,在最子类中调用前面的父类中的方法,如果通过一个一个父类向上查找,直到找到该方法为止,那么会使JAVA运行代码的效率过低,所以JAVA底层进行了优化创建了虚方法表。
JAVA会从最顶层的父类开始,把该类中的虚方法存入虚方法表,然后逐层传递,每一类都把自己类中的虚方法写入该表,直到最后的子类,这样当子类进行调用前面的父类的方法时,会直接查看该方法是否属于虚方法表,如果是则直接从虚方法表中调用,提高代码效率。
虚方法:没有被private修饰,没有被static修饰,没有被final修饰
继承中:构造方法的访问特点
(1)父类中的构造方法不会被子类继承.
(2)子类中所有的构造方法会默认先访问父类中的无参构造,再执行自己.(原因:1. 子类在初始化的时候,有可能会使用到父类中的数据,如果父类没有完成初始化,子类将无法使用父类的数据;2. 子类初始化之前,一定要调用父类构造方法先完成父类数据空间的初始化.)
怎么调用父类的构造方法
(1)子类构造方法的第一行默认语句都是: super(),不写也存在,且必须在第一行.
(2)如果想调用父类有参构造,必须手动写super进行调用.