package com.hu; public class Vehicle { public int num; public String mode; public String type; public void ability(){ System.out.println("交通工具具有载人出行的能力"); System.out.println("num:"+num+"\nmode:"+mode+"\ntype:"+type); } } public class Car extends Vehicle { public int num=6; public String mode="陆行"; public String type="汽车"; public void ability(){ System.out.println("汽车具有载人陆行的能力"); System.out.println("num:"+num+"\nmode"+mode+"\ntype"+type); } @Override public String toString() { return "Car [num=" + num + ", mode=" + mode + ", type=" + type + "]"; } public class Initail { public static void main(String[] args) { Vehicle vehicle = new Vehicle(); Vehicle car = new Car(); vehicle.ability(); System.out.println(); car.ability(); System.out.println(); System.out.println(car.num+"\n"+car.mode+"\n"+car.type);//就是这行 System.out.println(); System.out.println(car); } }
为什么
System.out.println(car.num+"\n"+car.mode+"\n"+car.type);
这句输出的是
0
null
null
而不是
6
陆行
汽车
父类引用指向子类对象的时候,只有调用方法的时候,得到的才是子类重写的方法,所以你的car.ability();输出的是正确的,但是car.num这样直接调用变量是不行的
你的属性应该写在方法里
我想应该是这样的:父类和子类有同名的属性时,子类的属性并不会覆盖父类的属性,使用父类引用输出属性值,输出的是父类的。而方法不同,方法会覆盖父类方法。
阔以 的
keyi