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

为什么运行的结果是 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。请问错在哪里?

提问者:huangguayutou 2016-04-30 19:49

个回答

  • 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


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

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

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


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

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