以下代码是分在三个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。请问错在哪里?
对于属性的重写重写, 我们需要看的是它被定义时的是属于什么类类型, 那么它的值就是它的类类型的相应属性的值
所以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
你父类对象指向子类、肯定输出 子类结果啦!看清楚噢!!
使用父类类型的引用指向子类的对象;该引用只能调用父类中定义的方法和变量;如果子类中重写了父类中的一个方法,那么在调用这个方法的时候,将会调用子类中的这个方法;(动态连接、动态调用)