[英]Inheritance in Java regarding multiple classes
假設我有一個名為MotorVehicle的父類,它有一些數據成員。 然后,我還有兩個子類,分別是Car和Truck,它擴展了父類MotorVehicle。
現在,在我的主要方法中,我有一個類型為MotorVehicle的ArrayList
ArrayList<MotorVehicle> myList = new ArrayList<MotorVehicle>();
現在,我的主要方法是使用對MotorVehicle類型的ArrayList中的所有四個類添加,刪除,列表,保存,排序對象的方法。
我可以將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類型。
我真的很困惑。
這就是它的行為方式。 您創建了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
。
是。
由於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
就不屬於他們。
由於您定義了Car
來擴展MotorVehicle
,因此它僅是MotorVehicle
的特定類型,因此可以將其添加到MotorVehicle
的列表中。 當您想對列表中的對象執行某項操作時,您可能需要根據要執行的操作檢查它們的特定類型。 您可以使用instanceof
做到這一點,有關更多信息,請參見此。
這個例子將幫助您了解其工作原理
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
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.