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

为什么运行的结果是 0 而不是 4?

以下代码是分在三个class文件的。贴到一起


//创建一个Vehicle的父类

public class Vehicle {

int paasenger;

}


//创建一个Car的子类

public class Car extends Vehicle {

int passenger = 4;

}


//执行

public class initial {

public static void main(String[] args) {

Vehicle obj1 = new Car();

System.out.println(obj1.passenger);

}

}

结果是0,而不是我想要的4。请问错在哪里?

正在回答

3 回答

对于属性的重写重写, 我们需要看的是它被定义时的是属于什么类类型, 那么它的值就是它的类类型的相应属性的值

所以obj.passenger的值是0, 因为obj1 的类型是Vehicle

如果在改写initial为如下代码:

public class Initial {

    public static void main(String[] args) {

        Vehicle obj1 = new Car();

        Car obj2 = new Car();

        System.out.println(obj1.passenger);

        System.out.println(obj2.passenger);

    }

}

则相应的输出为:

0

4


2 回复 有任何疑惑可以回复我~
#1

huangguayutou 提问者

非常感谢!
2016-05-18 回复 有任何疑惑可以回复我~

你父类对象指向子类、肯定输出 子类结果啦!看清楚噢!!

http://img1.sycdn.imooc.com//573add3d0001ba2806350553.jpg


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

使用父类类型的引用指向子类的对象;该引用只能调用父类中定义的方法和变量;如果子类中重写了父类中的一个方法,那么在调用这个方法的时候,将会调用子类中的这个方法;(动态连接、动态调用)

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

举报

0/150
提交
取消

为什么运行的结果是 0 而不是 4?

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