簡體   English   中英

Java中有關多個類的繼承

[英]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>的列表。 CarMotorVehicle的子類,因此將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

是。

由於CarMotorVehicle作為父項,因此它將繼承其方法,除非在您的Car聲明中將其覆蓋。 myList不是Car類型,但它是MotorVehicle類型,由於CarMotorVehicle類型,因此可以使用。

相反,您不能說ArrayList<Car> myList = new ArrayList<Car>(); 然后將MotorVehicle添加到列表中,因為某些類型的MotorVehicle不是Car 所有汽車都是汽車,但並非所有汽車都是汽車。 因此,如果您將汽車分組,那么汽車可以成為其中的一部分。

這與您有一個名為Fruit的父級並且有ApplesOranges作為子類的想法相同。 它們都是Fruit ,可能具有colourtaste等...但是,如果您有一系列的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM