为了账号安全,请及时绑定邮箱和手机立即绑定

关于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

正在回答

3 回答

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

0 回复 有任何疑惑可以回复我~

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

0 回复 有任何疑惑可以回复我~

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

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
Java入门第二季 升级版
  • 参与学习       530553    人
  • 解答问题       6091    个

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

进入课程

关于java里的父类引用子类

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信