假设我有一个名为MotorVehicle的父类,它有一些数据成员。 然后我还有两个名为Car的子类,以及扩展父类MotorVehicle的卡车。
现在,在我的main方法中,我有一个类型为MotorVehicle
的ArrayListArrayList<MotorVehicle> myList = new ArrayList<MotorVehicle>();
现在,我的主要方法是在MotorVehicle类型的ArrayList中使用来自所有四个类的ADD,REMOVE,LIST,SAVE,SORT对象的方法。
我可以在此列表中添加CAR类型的对象吗?我真的很困惑。 下面是一个示例输入(并且创建的对象存储在arrayList中):
Enter what you want to do-ADD,REMOVE,LIST,SAVE,SORT: aDd Enter vehicle type- CAR, BUS, TRUCK, OTHER: CaR
Enter the number of wheels: 4
Enter the engine size in cc: 300
Enter true for power steering else false: false
Enter the purchase date as mm/dd/yyyy: 11/22/2002 Enter the vehicle serial number: ADT13478
Enter the number of doors: 2
Enter the car's color: White
上述一系列问题创建了一个CAR类型的对象,并存储在myList中。这是如何运作的? myList不是Car的类型。
我真的很困惑。
答案 0 :(得分:1)
这就是它的表现方式。您创建了ArrayList<MotorVehicle>
的列表。
Car
是MotorVehicle
的子类,因此当您将一个Car
对象添加到MotorVehicle列表中时完全没问题。
例如,您可以执行以下操作
final Car my car = new Car();
if (car instanceof MotorVehicle) { System.out.println("I am a motor vehicle"); }
if (car instanceof Car) { System.out.println("I am a car"); }
汽车是Car
,也是MotorVehicle
。
答案 1 :(得分:1)
是。
由于Car
有MotorVehicle
作为父级,否则它将继承它的方法,除非在您的Car
声明中被覆盖。 myList
类型Car
不属于MotorVehicle
类型,Car
类型MotorVehicle
可以使用ArrayList<Car> myList = new ArrayList<Car>();
类型MotorVehicle
。
相反,你不能说MotorVehicle
,然后在列表中添加Car
,因为某些类型的Fruit
不是Apples
。所有汽车都是汽车,但并非所有汽车都是汽车。因此,如果您正在对机动车进行分组,那么汽车就可以成为其中的一部分。
这与您拥有名为Oranges
的父级并且您有Fruit
和colour
作为子类的想法相同。它们都是taste
,可能有Apples
,Orange
等等......但如果您有一个{{1}}数组,则{{1}}不能归属。< / p>
答案 2 :(得分:1)
由于您定义Car
以扩展MotorVehicle
,因此MotorVehicle
只是MotorVehicle
的特定类型,因此您可以将其添加到instanceof
列表中。
如果要对列表中的对象执行某些操作,可能需要根据要执行的操作来检查它们的具体类型。您可以使用{{1}}执行此操作,有关详细信息,请参阅this。
答案 3 :(得分:1)
此示例将帮助您了解其工作原理
class AClass {
public void printA() {
System.out.println("Inside AClass.printA");
}
}
class BClass extends AClass {
@Override
public void printA() {
System.out.println("Inside BClass.printA");
}
public void printB() {
System.out.println("Inside BClass.printB");
}
public static void main(String[] args) {
ArrayList<AClass> list = new ArrayList<AClass>();
list.add(new BClass());
list.get(0).printA();
list.get(0).printB(); //Compile time error "The method printB() is undefined for the type AClass"
((BClass) list.get(0)).printB(); //After casting it will work
}
}