public class ExtendTest {
public static void main(String[] args){
SubClass subClass=new SubClass();
System.out.println(subClass.getValue());
}
}class BaseClass{
int j=2;
public int getValue(){
return j;
}
}
class SubClass extends BaseClass{
int j=3;
}
上述代码,为什么输出是2,而不是3?
public static void main(String[] args){
SubClass subClass=new SubClass();
System.out.println(subClass.getValue());
}
}class BaseClass{
int j=2;
public int getValue(){
return j;
}
}
class SubClass extends BaseClass{
int j=3;
}
上述代码,为什么输出是2,而不是3?
int j=2;
public int getValue(){
return this.j;
}java没有对变量的overriding,只会出现在方法中假如如下所写就是你想象的那种情况public class ExtendTest {
public static void main(String[] args){
SubClass subClass=new SubClass();
System.out.println(subClass.getValue());
}
}class BaseClass{
protected int j=2;
public int getValue(){
return j;
}class SubClass extends BaseClass{
public int getValue(){
j = 3;
return j;
}
}
public static void main(String[] args) {
SubClass subClass = new SubClass();
System.out.println(subClass.getValue());
}
}class BaseClass {
int j = 2; public int getValue() {
return j;
}}class SubClass extends BaseClass {
int j = 3;
public int getValue(){
return j;
}}
子类有j这个变量,为什么返回的是父类的j变量,不是子类本身的j变量?
初始化子类时,会先执行父类的构造函数。我们也可以由此理解下,子类“继承”得来的东西,与子类自己定义的东西,是不一样的。否则,也就不会有“覆盖”这么一说了。
自己的东西,自己初始化就好了。而父类那边的东西,还是要父类自己去初始化的,子类有受限制的使用权。额,说的不够专业,勉强各位看看
楼主想要输出3 在subClass里面再写一遍getValue方法就可以了