如果我有一個超類,我們稱它為 Car,建構式引數為 String name、String color、double wheelSize 和 this 的子類,我們稱它為 Truck,建構式引數為 String name、String color、double wheelSize 和 double TruckBedArea,在子類(卡車)中,我有一個名為 modifyCar 的方法,其引數為 Car car、String newName、String newColor、double newWheelSize 和 double newTruckBedArea,我怎樣才能找到一種方法來獲取該 Car 物件并指定它確實是卡車,所以我可以使用卡車設定器(setTruckBedArea)來設定新的卡車床區域?這個例子與我的實際分配并沒有很好的比較,但是我的超類(Cars)有一個 ArrayList 欄位,稱為“Car”物件的“ArrayList cars”,我需要找到一種方法來改變那個“Car” 這個 ArrayList 欄位中的物件,我已經找到了一種方法。我只是回圈遍歷“Cars”的 ArrayList 中的每個專案,直到它等于作為引數輸入的 Car 的實體,如果是這樣,我然后說“cars.get(i).//setter”(本質上) . 但是,如果我說“cars.get(i).setTruckBedArea(newTruckBedArea)”,它將不起作用。我不確定如何將這個 Cars 串列中的 Car 物件專門轉換為 Truck,因此我可以訪問我想要使用的 setter。主要問題是我需要實作一個介面(我們稱之為“Vehicle”),其中 ArrayList 汽車必須是汽車型別,因為它被指定為 Vehicle 介面中的介面(否則我只會更改 ArrayList欄位為 ArrayList 卡車)。我已經找到了一種方法。我只是回圈遍歷“Cars”的 ArrayList 中的每個專案,直到它等于作為引數輸入的 Car 的實體,如果是這樣,我然后說“cars.get(i).//setter”(本質上) . 但是,如果我說“cars.get(i).setTruckBedArea(newTruckBedArea)”,它將不起作用。我不確定如何將這個 Cars 串列中的 Car 物件專門轉換為 Truck,因此我可以訪問我想要使用的 setter。主要問題是我需要實作一個介面(我們稱之為“Vehicle”),其中 ArrayList 汽車必須是汽車型別,因為它被指定為 Vehicle 介面中的介面(否則我只會更改 ArrayList欄位為 ArrayList 卡車)。我已經找到了一種方法。我只是回圈遍歷“Cars”的 ArrayList 中的每個專案,直到它等于作為引數輸入的 Car 的實體,如果是這樣,我然后說“cars.get(i).//setter”(本質上) . 但是,如果我說“cars.get(i).setTruckBedArea(newTruckBedArea)”,它將不起作用。我不確定如何將這個 Cars 串列中的 Car 物件專門轉換為 Truck,因此我可以訪問我想要使用的 setter。主要問題是我需要實作一個介面(我們稱之為“Vehicle”),其中 ArrayList 汽車必須是汽車型別,因為它被指定為 Vehicle 介面中的介面(否則我只會更改 ArrayList欄位為 ArrayList 卡車)。直到它等于作為引數輸入的 Car 的實體,如果是,我會說“cars.get(i).//setter”(本質上)。但是,如果我說“cars.get(i).setTruckBedArea(newTruckBedArea)”,它將不起作用。我不確定如何將這個 Cars 串列中的 Car 物件專門轉換為 Truck,因此我可以訪問我想要使用的 setter。主要問題是我需要實作一個介面(我們稱之為“Vehicle”),其中 ArrayList 汽車必須是汽車型別,因為它被指定為 Vehicle 介面中的介面(否則我只會更改 ArrayList欄位為 ArrayList 卡車)。直到它等于作為引數輸入的 Car 的實體,如果是,我會說“cars.get(i).//setter”(本質上)。但是,如果我說“cars.get(i).setTruckBedArea(newTruckBedArea)”,它將不起作用。我不確定如何將這個 Cars 串列中的 Car 物件專門轉換為 Truck,因此我可以訪問我想要使用的 setter。主要問題是我需要實作一個介面(我們稱之為“Vehicle”),其中 ArrayList 汽車必須是汽車型別,因為它被指定為 Vehicle 介面中的介面(否則我只會更改 ArrayList欄位為 ArrayList 卡車)。
例子:
public class Truck implements Vehicle { //have to implement this interface
//... other fields
private ArrayList<Car> cars;
//... other methods/constructors
public void modifyCar(Car car, String newName, String newColor, double newWheelSize, double newTruckBedArea) {
//have to have "Car car" as parameter for this method because of interface
for (int i = 0; i < cars.size(); i ) {
if (cars.get(i).equals(car)) {
cars.get(i).setColor(newColor);
cars.get(i).setName(newName);
cars.get(i).setWheelSize(newWheelSize);
cars.get(i).setTruckBedArea(newTruckBedArea); //will produce error
}
}
}
}
uj5u.com熱心網友回復:
據我了解這個問題,您可以使用“instanceof”運算子:
if(cars.get(i) instanceof Truck){
Truck truck = (Truck) cars.get(i);
truck.setTruckBedArea(newTruckBedArea);
}
instanceof 運算子在物件是否為給定型別的實體的結果中回傳一個布林值。
uj5u.com熱心網友回復:
Vehicle 應該是一個抽象類。
汽車介面
public interface Car {
void modifyCar(Car car, String newName, String newColor, double newWheelSize, double newTruckBedArea);
}
車輛抽象類
public abstract class Vehicle implements Car {
String name;
String color;
double wheelSize;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public double getWheelSize() {
return wheelSize;
}
public void setWheelSize(double wheelSize) {
this.wheelSize = wheelSize;
}
}
卡車類
public class Truck extends Vehicle {
double truckBedArea;
private ArrayList<Car> cars;
public double getTruckBedArea() {
return truckBedArea;
}
public void setTruckBedArea(double truckBedArea) {
this.truckBedArea = truckBedArea;
}
public ArrayList<Car> getCars() {
return cars;
}
public void setCars(ArrayList<Car> cars) {
this.cars = cars;
}
@Override
public void modifyCar(Car car, String newName, String newColor, double newWheelSize, double newTruckBedArea) {
for (int i = 0; i < cars.size(); i ) {
if (cars.get(i).equals(car)){
((Vehicle)cars.get(i)).setColor(newColor);
((Vehicle)cars.get(i)).setWheelSize(newWheelSize);
((Truck)cars.get(i)).setTruckBedArea(newTruckBedArea);
}
}
}
}
運行代碼。
public static void main(String[] args) {
// TODO code application logic here
Truck trucks = new Truck();
trucks.setColor("Red");
trucks.setName("Nissan");
trucks.setWheelSize(20.15);
trucks.setTruckBedArea(3.5);
ArrayList<Car> cars = new ArrayList<Car>();
cars.add(trucks);
trucks.setCars(cars);
trucks.modifyCar(trucks, "Kia", "Blue", 15.5, 14.0);
System.out.println(trucks.getTruckBedArea());
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/444335.html
