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

来源:10-1 Java 中的多态

huangguayutou

2016-04-30 19:49

以下代码是分在三个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回答

  • Acan
    2016-04-30 20:33:41
    已采纳

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

    所以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


    huangg...

    非常感谢!

    2016-05-18 17:16:16

    共 1 条回复 >

  • 流逝的回忆已成空白
    2016-05-17 16:58:41

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

    http://img.mukewang.com/573add3d0001ba2806350553.jpg


  • Sawano
    2016-05-16 16:19:40

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

Java入门第二季 升级版

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

530649 学习 · 6091 问题

查看课程

相似问题