繁体   English   中英

将不同的 object 类型存储在一个数组中,并用它们的方法打印每一个

[英]Store different object type in one array and print each one with their methods

我正在尝试为它的汽车和子类创建父 class。 每个都有单独的方法并将它们存储在一个数组中,然后如果 class 是子类,请尝试调用它的方法。

家长 class

public class car {

    public  String name ;
    public double price ;
    
    public car (String name , int price) {
        this.name = name ;
        this.price = price;
    }
    
    public String  toString() {
        return "car name : "+this.name 
               +" Price : " +this.price ;   
    }   
}

子 class

public class CarMotors extends car {

    public float MotorsCapacity ;

    public CarMotors( String name, int price , float MotorsCapacity) {
        super(name, price);
        this.MotorsCapacity = MotorsCapacity ;
    }
    
    public float getMotorsCapacity() {
        return this.MotorsCapacity; 
    }
}

主 class

public class Test {

    public static void main(String[] args) {
        car [] cars = new car[2] ;
        
        cars[0] = new car("M3" , 78000);
        cars[1] = new CarMotors("M4" , 98000 , 3.0f);
        
        for(int i=0 ;i<2;i++){
            if(cars[i] instanceof CarMotors) {
                System.out.println(cars[i].getMotorsCapacity()); // error here
            }else {
                System.out.println(cars[i].toString());
            }
        }
    }
}

如您所见,我无法打印 getMotorsCapacity()。 我是 Java 的新手。我认为需要进行一次转换,但我现在不知道如何进行。

短... class只能看到你的行为。

在您的示例中, CarMotorsCar ,这很好。

但是行为getMotorsCapacity()是在CarMotors中创建的,而不是在Car中。

发生该错误的原因是,在变量 Car 中可以放置CarMotors的实例,因为CarMotors是 Car。 因此,Car 中的任何方法也在CarMotors中,是的,您可以调用。 看看cars[i].toString()这里没有问题。

你需要明确地告诉编译器:
“——哦,对了,原来这个变量是一个 Car,但我知道里面是一个 CarMotors。我会在这里做一个转换,编译器好吗?谢谢。”

System.out.println(((CarMotors) cars[i]).getMotorsCapacity());

或者,更明确地说:

CarMotors carMotors = ((CarMotors) cars[i]); 
System.out.println(carMotors.getMotorsCapacity());

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM