问答详情
源自:10-1 Java 中的多态

关于java里的父类引用子类

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

提问者:慕粉1444458004 2017-02-26 17:22

个回答

  • 原木兮
    2017-02-28 20:32:03

    这是因为你在Sub类重新定义了一个新的成员变量nums,你试试在sub类中将public int nums;注释掉,结果就正常了。这里涉及到两个类中同名变量的问题,即使两个类中变量名相同,但任然认为这是两个不同量。而且Sub已经继承了Base类的成员变量,你完全没必要再在Sub类中进行声明。

  • weibo_小灰笔记_Grey_04411955
    2017-02-26 20:51:10

    我也是初学,先不说代码的设计意图,纯粹读代码但是我觉得这个应该就是base中的初值,也就是0。如果你想让他成为100,那么sub构造方法应该是静态的,这样才会加载为100的初值。你的代码有语法错误,我试试改改,验证下我的猜想。

  • Elwin
    2017-02-26 20:50:21

    如果访问父类的属性,应该使用super关键字,比如super.nums