关于java里的父类引用子类

来源:10-1 Java 中的多态

慕粉1444458004

2017-02-26 17:22

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

写回答 关注

3回答

  • 原木兮
    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

Java入门第二季 升级版

课程升级!以终为始告别枯燥,在开发和重构中体会Java面向对象编程的奥妙

530557 学习 · 6091 问题

查看课程

相似问题