public class Initial {
public static void main(String [] agr){
Base a=new Sub();
a.print();
System.out.println(a.nums);
}
}
public class Base {
public int nums=10;
public void print(){
System.out.println("这里是Base的方法");
}
public Base(){
this.nums=50;
}
}
public class Sub extends Base {
public int nums;
public int ages;
public void print(){
System.out.println("这里是Sub的方法");
}
public Sub(){
this.nums=100;
this.ages=10;
System.out.println("这里是sub构造方法")
}
}
为什么最后nums的值是base类中的,不应该是sub类中的100么
如果说this是值当前对象,那在sub的构造方法里的this.nums=100,不应该是base类中的nums么,可是最后的结果是basr类里的nums=50
这是因为你在Sub类重新定义了一个新的成员变量nums,你试试在sub类中将public int nums;注释掉,结果就正常了。这里涉及到两个类中同名变量的问题,即使两个类中变量名相同,但任然认为这是两个不同量。而且Sub已经继承了Base类的成员变量,你完全没必要再在Sub类中进行声明。
我也是初学,先不说代码的设计意图,纯粹读代码但是我觉得这个应该就是base中的初值,也就是0。如果你想让他成为100,那么sub构造方法应该是静态的,这样才会加载为100的初值。你的代码有语法错误,我试试改改,验证下我的猜想。
如果访问父类的属性,应该使用super关键字,比如super.nums