【发布时间】:2012-07-04 12:06:08
【问题描述】:
我有以下情况:
public class A {
private int x = 5;
public void print()
{
System.out.println(x);
}
}
public class B extends A {
private int x = 10;
/*public void print()
{
System.out.println(x);
}*/
public static void main(String[] args) {
B b = new B();
b.print();
}
}
执行代码时,输出为:5。
如何通过父类方法访问子类(B's)变量(x)?
这是否可以在不覆盖 print() 方法(即在 B 中取消注释)的情况下完成?
[这很重要,因为在重写时我们将不得不再次重写 print() 方法的整个代码]
已编辑
更多说明:-
- 问题的动机是使用来自其父类方法的子类私有变量的值。这不需要更改父类私有变量的值即可达到预期的结果。
- 不过,这里发布的答案让我得到了我想要的答案,我在下面发布了。
(感谢大家的时间和帮助)
【问题讨论】:
-
当你想打印B的变量
x时,你是想让x和A的x不同,还是应该一样? -
@WeiHao 从代码中很明显
A中的x是5,B中的一个是10。他希望B.print()输出10,因为他对输出 5 不满意。因此他希望它们有所不同。 -
@Jayant 这不是关于父母没有信息,它没有。问题是
x的值在创建B期间没有被覆盖。 -
我主要担心的是,这里父类中的代码不能被子类重用。这段代码可以重复使用吗?
-
@Jayant 父类中的代码可以重用,看看我的回答:)。您的问题是
x的值在创建B时没有更新,因为默认值只评估一次。
标签: java oop inheritance