【Java】之继承
Java中使用extends关键字,让我们在类和类之间建立联系。
使用继承的好处:
-
可以将多个类中重复的代码,抽象至父类中供子类使用。
-
子类可以在父类上的基础上继续增强,使子类可以有自己独特的性质和功能。
特点:
在Java中,只支持单继承,不支持多继承,但支持多层继承。
子类可以继承父类的哪些内容呢?
子类可以不可以继承构造方法。每个类的构造方法名和类名一样,而父类与子类的名字不可能一样,并且子类会有自己的属性,因此子类的构造方法需要自己重新定义。
子类可以继承父类的成员变量,但是不能调用父类的私有属性。
子类可以继承父类的虚方法,非虚方法不能继承。(JVM会给每个子类分配一张虚方法表)
虚方法:没有被 private
、static
、final
修饰的方法。
方法重写会覆盖虚方法表中继承父类的方法。
方法重写
方法重写是指父类实现的方法不能满足子类,这时子类可以重新实现此方法。
特点:
-
重写方法的名称、形参列表必须与父类中的一致。
-
子类重写方法时,访问权限子类必须大于父类。
-
子类重写父类方法时,返回类型子类必须小于父类。
-
只有被添加到虚方法表中的方法才能被重写。
构造方法的访问特点
-
父类的构造方法不会被子类继承。
-
子类中所有的构造方法默认都会默认父类构造方法先完成父类数据空间的初始化。
子类在初始化的时候,有可能会使用到父类的数据,如果父类没有完成初始化,子类将无法使用父类的数据。因此,子类在初始化之前,一定要调用父类的构造方法先完成父类数据空间的初始化。
如何调用父类的构造方法?
-
子类构造方法的第一行语句默认都是:super(),不写也存在(JVM会自动添加),且必须在第一行。
-
如果想调用父类有参构造,必须手动写super进行调用。
this、super使用总结
this:一个存储着当前调用者地址值的变量。
this关键字一般用在方法中,可以访问调用者。当方法被调用时会默认将该调用者地址值传过去,使用时通过this关键字调用。相当于一个局部变量。
super:一个存储着当前调用者父类地址值的变量。(与this类似)