继承

子类可以继承父类的成员变量和方法,但是之间是有区别的。

Derived extends Base;

Base b=new Derived();

此时因为将Derived的对象赋给了Base变量,系统会自动向上转型来保证程序的正确。

此时,通过b来访问实例变量时输出的是Base(声明时类型)对象的实例变量值,如果调用方法,则调用的是Derived(运行时类型)对象的行为。

如果

Derived d = new Derived();

Base bd = d;

这意味这 bd 和 d 变量都指向了同一个java对象。因此如果判断 bd == d返回的是 true;

但是  此时 通过 d调用成员变量,调用的是 子类的成员变量。通过bd调用成员变量,调用的却是父类的成员变量。

两个指向同一个对象的变量,访问他们的实例却输出了不同的值。

这表明:bd 和 d所指向的java对象中包含了两块内存。


不管对象的声明类型是什么,调用方法时,方法的行为总是表现出他们实际类型的行为。

如果通过对象来访问他们所指向的实例变量时,这些实例的值总是表现为这些变量声明类型的行为。

这是成员变量和方法在继承时的区别


如果子类重写了父类的方法,这意味着子类定义的方法彻底覆盖了父类的同名方法,系统将不可能把父类的方法转移到子类中。

但是实例变量即使在子类中定义了与父类完全同名的实例变量,这个实例变量也依然不能覆盖父类中定义的实例变量。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值