java继承总结

java与c++不同的是,java是单继承(一个直接父类)。
从子类的角度看,子类扩展了父类,从父类的角度看,父类派生了子类。
1 继承特点
子类获得父类(直接的和间接的)的所有成员(包括静态与非静态,甚至private成员,只是子类无法访问而已),但并不会继承父类的构造器。
2 重写父类方法
什么是重写(也叫覆盖):满足3同2小1大

  • 3同: 方法名 ,参数列表,同是类方法或者实例方法(一个类方法,一个实例方法会导致编译出错)

  • 2小:子类方法返回值类型比父类方法小或相等 , 子类方法声明抛出的异常要比父类类方法声明抛出的异常小或者相等

  • 1大:子类方法的访问权限要比父类方法的访问权限大或者相等。
    注意:如果父类方法有private权限,则该方法是对子类方法隐藏的,因此子类无法访问该方法,也就是无法重写该方法。如果子类定义了一个与父类private方法具有相同的方法名,相同参数列表,相同返回值的方法,这依然不是重写,只是定义了一个新的方法而已。
    3 super限定
    子类重写了父类的方法,那么若子类想要调用被覆盖的方法呢?,这时就可以使用super(针对实例方法)或父类名(针对类方法)来限定调用的是父里定义的方法。
    注意:正如this不能出现在static修饰的方法中一样,super也不能出现在static修饰的方法中,因为this和super都是与对应对象相关的。
    若super用于构造器中,则super用于限定该构造器初始化的是该对象从父类继承得到的实例变量,而不是自己的实例变量。(这就说明了当创建一个子类对象时,同是会调用父类构造器创建一个父类对象)。
    4调用父类构造器
    子类不会获得父类的构造器,但子类可以调用父类的构造器,类似于同一个类中多个构造器的相互调用。
    在一个构造器中,调用另一个构造器用this来完成,在子类中调用父类构造器使用super(super(参数列表))来完成。与this类似。所以使用super调用父类构造器也必须出现在子类构造器执行体的第一行,所以this和super不会同时出现。
    子类构造器调用父类构造器通常有以下几种情况:

  • 1 子类构造器执行体的第一行使用super显式调用父类构造器,系统将会根据super传入的实参调用父类相应的构造器。

  • 2 子类构造器执行体的第一行使用this显式调用本类中重载的构造器,系统将会根据this传入的实参调用本类中重载的构造器,执行本类另一个构造器时即会调用父类构造器。

  • 3 子类构造器既没有super,也没有this,系统将会在执行子类构造器之前隐式调用父类的无参构造器。

猜你喜欢

转载自blog.csdn.net/qq_43215734/article/details/85223309