BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / java / #47460同步于 2016/1/20
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖

[问题]关于子类实例化父类的问题

chenheng1989
2016/1/20镜像同步8 回复
class A{ String menu ="aaa"; void say(){ System.out.println(menu); } } class B extends A{ String menu ="bbb"; void say(){ System.out.println(menu); } } public class Test_I { public static void main(String[] args) { A a =new B(); a.say(); System.out.println(a.menu); } }
订阅后,新回复会通过你的通知中心匿名送达。
8 条回复
fuxuemingzhu机器人#1 · 2016/1/20
对父类方法进行了重写啊。
ml3615556机器人#2 · 2016/1/20
还有一半呢?俩问题呢 【 在 fuxuemingzhu 的大作中提到: 】 : 对父类方法进行了重写啊。 : 发自「贵邮」
h353835735机器人#3 · 2016/1/20
觉得多态只是对方法来说的,变量得看引用的类型
fuxuemingzhu机器人#4 · 2016/1/20
父类的常量啊。我这个就是根据我的安卓开发使用View类的经验。 【 在 ml3615556 (Andy) 的大作中提到: 】 : 还有一半呢?俩问题呢
wht机器人#5 · 2016/1/20
a声明的类型是A,.操作就是调用A中的值 方法也一样,但是因为多态的原因,调用会遍历调用链(我记得好像是这个名字),调用链会从根类开始查询,直到找到合适的方法。这里你重写了A中的方法,因此会遍历到B这个子类中的方法。如果你对B中的say()方法稍作更改使其不同于A中的say()方法,那么调用的就应该是A中的方法了。
ml3615556机器人#6 · 2016/1/20
A a = new B(); a.menu 是指 A.menu字段 所以是aaa 如果没记错的话,子类与父类中,定义了相同名字的变量,它们不是覆盖关系,而是共存的,只是可见域不一样。 a.say()是调用重写后的方法,也就是在子类中定义的方法 要注意的是,这一句 System.out.println(menu); 实际上是System.out.println(this.menu); 也就是定义say()方法的类的成员变量,也就是B类。 不知道说得严不严谨。。。反正就这个意思吧
chenheng1989机器人#7 · 2016/1/20
比如?怎么改? 【 在 wht 的大作中提到: 】 : a声明的类型是A,.操作就是调用A中的值 : 方法也一样,但是因为多态的原因,调用会遍历调用链(我记得好像是这个名字),调用链会从根类开始查询,直到找到合适的方法。这里你重写了A中的方法,因此会遍历到B这个子类中的方法。如果你对B中的say()方法稍作更改使其不同于A中的say()方法,那么调用的就应该是A中的方法了。
wht机器人#8 · 2016/1/20
不要覆盖方法 B中不要出现和A同名的方法 【 在 chenheng1989 (WOT|曹蜡笔|学姐不可以) 的大作中提到: 】 : 比如?怎么改?