我正在输出
SubClass subClass = new SubClass(4);
System.out.println(subClass.getVal());
这两个类:
public class SuperClass {
public int x = 99;
public int superClassMethod() {
return -1;
}
}
public class SubClass extends SuperClass {
public int x;
public SubClass(int value) {
x = value;
}
public int getVal() {
return x;
}
}
这会按预期输出 4
。但是假设我在 SubClass
构造函数中注释掉了行 x = value
。为什么它输出 0
(我假设未初始化变量的默认值)而不是 99
,继承自父类(super class)?
如果我将 return x
更改为 return superClassMethod();
它似乎正确地从父类(super class)中提取了 -1
。那么为什么是方法而不是变量呢?
最佳答案
当变量在不同范围内具有冲突的名称时,它总是使用最近范围内的变量,即使它尚未设置为任何内容。
为了区分其他作用域中的变量,在变量前面加上this
或super
:
public class SuperClass {
protected int x;
}
public class SubClass extends SuperClass {
private int x;
public SubClass(int x) {
x = 2; // sets the parameter variable
this.x = 2; // sets the instance variable
super.x = 2; // sets the super class' instance variable
}
}
关于java - 为什么我不继承父类(super class)变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36520636/