黑马程序员 继承时函数和变量处理方式不同

---------------------- android培训java培训、期待与您交流! ---------------------- 

黑马程序员   继承时函数和变量处理方式不同 - s - s的学习记录
这里f对象是父类引用,z对象是子类引用
z调用z.num和z.show()毫无疑问是5和showZi
f对象的show()方法已经被子类覆盖(重写),所以f.show()打印的还是 showZi
 而f.num却不是5,仍是父类的4
因为 子类的实例变量num其实是隐藏了父类的实例变量num,并没有覆盖,由于f是父类引用,所以调用了4
想要打印子类的5,必须转换类型, Zi p= (Zi)f;    然后p.num就是5
或者直接System.out.println(((Zi)f).num);

小结一下
Java中变量与方法在继承中的隐藏与覆盖规则:
1、父类的实例变量和类变量能被子类的同名变量隐藏。
2、父类的静态方法被子类的同名静态方法 隐藏,父类的实例方法被子类的同名实例方法 覆盖
3、不能用子类的静态方法隐藏父类的实例方法,也不能用子类的实例方法覆盖父类的静态方法,否则编译器会异常。
4、用final关键字修饰的最终方法不能被覆盖。
5、 变量只能被隐藏不会被覆盖,子类的实例变量可以隐藏父类的类变量,子类的类变量也可以隐藏父类的实例变量。


 -------------------- ASP.Net+Android+IOS开发.Net培训、期待与您交流! ----------------------
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值