返回信息流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);
}
}
这是一条镜像帖。来源:北邮人论坛 / java / #47460同步于 2016/1/20
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
[问题]关于子类实例化父类的问题
chenheng1989
2016/1/20镜像同步8 回复
订阅后,新回复会通过你的通知中心匿名送达。
8 条回复
父类的常量啊。我这个就是根据我的安卓开发使用View类的经验。
【 在 ml3615556 (Andy) 的大作中提到: 】
: 还有一半呢?俩问题呢
a声明的类型是A,.操作就是调用A中的值
方法也一样,但是因为多态的原因,调用会遍历调用链(我记得好像是这个名字),调用链会从根类开始查询,直到找到合适的方法。这里你重写了A中的方法,因此会遍历到B这个子类中的方法。如果你对B中的say()方法稍作更改使其不同于A中的say()方法,那么调用的就应该是A中的方法了。
A a = new B();
a.menu 是指 A.menu字段
所以是aaa
如果没记错的话,子类与父类中,定义了相同名字的变量,它们不是覆盖关系,而是共存的,只是可见域不一样。
a.say()是调用重写后的方法,也就是在子类中定义的方法
要注意的是,这一句
System.out.println(menu);
实际上是System.out.println(this.menu);
也就是定义say()方法的类的成员变量,也就是B类。
不知道说得严不严谨。。。反正就这个意思吧
比如?怎么改?
【 在 wht 的大作中提到: 】
: a声明的类型是A,.操作就是调用A中的值
: 方法也一样,但是因为多态的原因,调用会遍历调用链(我记得好像是这个名字),调用链会从根类开始查询,直到找到合适的方法。这里你重写了A中的方法,因此会遍历到B这个子类中的方法。如果你对B中的say()方法稍作更改使其不同于A中的say()方法,那么调用的就应该是A中的方法了。