Java中父子类的那些事

2019-11-21  本文已影响0人  贾小立


Java中父子类的那些事

构造方法

1、子类构造方法执行时,都会先执行父类的构造方法,若没有显式地调用父类的构造方法(super()、super(xx)等),则默认是调用了父类的无参构造方法(super());

2、若父类的所有构造方法都被private修饰,则父类相当于是个final类,不能被继承,因为1的原因,子类没法创建对象;

3、创建子类对象时,只是调用了父类的构造方法,并没有创建父类对象;调用构造方法不等于创建对象,只是用于初始化,new关键字只调用了一次,空间只开辟了一块,对象也只创建了一个;

成员变量

1、子类声明了与父类完全一样的成员变量,不会覆盖掉父类的成员变量。而是在子类实例化时,会同时定义两个成员变量,子类也可以同时访问到这两个成员变量(this.i&super.i),但父类不能访问到子类的成员变量(父类不知道子类的存在)。

2、在方法中使用成员变量时,究竟使用的是父类还是子类的成员变量,由方法所在的类决定;即,方法在父类中定义和执行,则访问的是父类的成员变量,方法在子类中定义(包括覆盖父类方法)和执行,则访问的是子类的成员变量。

3、成员变量没有多态的属性,只有非private且非static的实例方法,才能实现运行时的多态。

this和super

1、this.xx代表this所在类的成员变量(即,如果该类被继承,虽然创建出的对象是子类,但this.xx仍指向父类的成员变量)

2、super()和this()均需放在构造方法内第一行

3、从本质上讲,this是一个指向本对象的指针, 然而super是一个Java关键字,用于指向父类里的变量、方法

成员方法

1、可重写的成员方法才支持多态,不可重写的成员方法(final、private、静态)以及成员变量不支持多态

2、子类重写父类的方法,访问权限不能小于父类(private<protected<public)

总结

Fu fu = new Zi();    fu.xxx,执行的xxx是父的or子的?

xxx是不支持多态的(成员变量、不能被重写的方法),看左边变量;

xxx是支持多态的(能被子类重写的方法),看右边对象;

一个Demo全明白

父类子类分别调用同名成员变量、同名静态方法、同名普通方法

输出:

fu.age = 80    //成员变量看左边变量

Fu static     //静态方法看左边变量

Zi hello      //被复写的方法看右边对象

zi.age = 40       //成员变量看左边变量

Zi static     //静态方法看左边变量

Zi hello     //被复写的方法看右边对象

上一篇下一篇

猜你喜欢

热点阅读