关于多个类的Java继承

时间:2014-11-12 04:03:04

标签: java class inheritance extends

假设我有一个名为MotorVehicle的父类,它有一些数据成员。 然后我还有两个名为Car的子类,以及扩展父类MotorVehicle的卡车。

现在,在我的main方法中,我有一个类型为MotorVehicle

的ArrayList
ArrayList<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的类型。

我真的很困惑。

4 个答案:

答案 0 :(得分:1)

这就是它的表现方式。您创建了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

答案 1 :(得分:1)

是。

由于CarMotorVehicle作为父级,否则它将继承它的方法,除非在您的Car声明中被覆盖。 myList类型Car不属于MotorVehicle类型,Car类型MotorVehicle可以使用ArrayList<Car> myList = new ArrayList<Car>();类型MotorVehicle

相反,你不能说MotorVehicle,然后在列表中添加Car,因为某些类型的Fruit不是Apples。所有汽车都是汽车,但并非所有汽车都是汽车。因此,如果您正在对机动车进行分组,那么汽车就可以成为其中的一部分。

这与您拥有名为Oranges的父级并且您有Fruitcolour作为子类的想法相同。它们都是taste,可能有ApplesOrange等等......但如果您有一个{{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
    }
}