Java 当子类对象存储在超类数组中时,如何调用子类方法? { 船舶=新船舶(); 货船货船=新货船(); CruiseShip CruiseShip=新CruiseShip(); 船舶[]所有船舶={船舶、货船、游轮}; 所有船舶[0]。设置船舶名称(“Boom”); 所有船舶[0].SetYearBuild(“1900”); 所有船舶[1]。设置船舶名称(“Bang”); 所有船舶[1]。集货能力(200); 所有船舶[2]。设置船舶名称(“Bam”); 所有船舶[2]。设置最大乘客数(500); for(int i=0;i

Java 当子类对象存储在超类数组中时,如何调用子类方法? { 船舶=新船舶(); 货船货船=新货船(); CruiseShip CruiseShip=新CruiseShip(); 船舶[]所有船舶={船舶、货船、游轮}; 所有船舶[0]。设置船舶名称(“Boom”); 所有船舶[0].SetYearBuild(“1900”); 所有船舶[1]。设置船舶名称(“Bang”); 所有船舶[1]。集货能力(200); 所有船舶[2]。设置船舶名称(“Bam”); 所有船舶[2]。设置最大乘客数(500); for(int i=0;i,java,arrays,inheritance,subclass,superclass,Java,Arrays,Inheritance,Subclass,Superclass,因此,船舶级别是超级级别,而货船和邮轮都扩展了船舶级别。我已将这3个对象存储到一个舰船阵列中。setCargoCapacity和SetMaxPassentials是仅出现在子类中的方法。由于某些原因,我无法访问它们。我不知道如何创建它,以便也可以访问子类方法。您不能调用从船舶[]中选择的船舶的设置载货能力,因为该船舶可能不是货船。您必须在Ship类中提供一些方法(因此适用于所有船舶)来执行您需要它执行的操作,或者检查Ship instanceof CargoShip,如果是,您可以对其进行强制转

因此,船舶级别是超级级别,而货船和邮轮都扩展了船舶级别。我已将这3个对象存储到一个舰船阵列中。setCargoCapacity和SetMaxPassentials是仅出现在子类中的方法。由于某些原因,我无法访问它们。我不知道如何创建它,以便也可以访问子类方法。

您不能调用从
船舶[]
中选择的
船舶的
设置载货能力
,因为该船舶可能不是
货船
。您必须在
Ship
类中提供一些方法(因此适用于所有船舶)来执行您需要它执行的操作,或者检查
Ship instanceof CargoShip
,如果是,您可以对其进行强制转换(
CargoShip-CargoShip=(CargoShip)Ship
)然后调用它的
setCargoCapacity

你不能调用从
Ship[]
中挑选出来的
船舶的
setCargoCapacity
,因为该船舶可能不是
货船。您必须在
Ship
类中提供一些方法(因此适用于所有船舶)来执行您需要它执行的操作,或者检查
Ship instanceof CargoShip
,如果是,您可以对其进行强制转换(
CargoShip-CargoShip=(CargoShip)Ship
)然后调用它的
setCargoCapacity

你不能调用从
Ship[]
中挑选出来的
船舶的
setCargoCapacity
,因为该船舶可能不是
货船。您必须在
Ship
类中提供一些方法(因此适用于所有船舶)来执行您需要它执行的操作,或者检查
Ship instanceof CargoShip
,如果是,您可以对其进行强制转换(
CargoShip-CargoShip=(CargoShip)Ship
)然后调用它的
setCargoCapacity

你不能调用从
Ship[]
中挑选出来的
船舶的
setCargoCapacity
,因为该船舶可能不是
货船。您必须在
Ship
类中提供某种方法(因此适用于所有船舶)来执行您需要它执行的操作,或者检查
Ship实例是否为CargoShip
,如果是这样,您可以对其进行强制转换(
CargoShip-CargoShip=(CargoShip)Ship
),并调用该类的
设置cargocapacity

您无法执行此操作。在java中,引用变量有两种类型:引用类型和实际对象类型。因此,当您编写类似于
Object o=“12345”
的东西时,
o
具有type
Object
(而不是
String
),并且您不能使用
o
像使用String那样不进行类型转换:
o=((String)o)。子字符串(1)


在您的情况下,数组中的所有引用
allShips
都具有类型
Ship
。如果您知道某个数组元素的实际类型是
Ship
子类,则可以像上面那样强制转换实际类型。但这是一种不好的做法,不应该在现实世界中使用。

你不能这样做。在java中,引用变量有两种类型:引用类型和实际对象类型。因此,当您编写类似于
Object o=“12345”
的东西时,
o
具有type
Object
(而不是
String
),并且您不能使用
o
像使用String那样不进行类型转换:
o=((String)o)。子字符串(1)


在您的情况下,数组中的所有引用
allShips
都具有类型
Ship
。如果您知道某个数组元素的实际类型是
Ship
子类,则可以像上面那样强制转换实际类型。但这是一种不好的做法,不应该在现实世界中使用。

你不能这样做。在java中,引用变量有两种类型:引用类型和实际对象类型。因此,当您编写类似于
Object o=“12345”
的东西时,
o
具有type
Object
(而不是
String
),并且您不能使用
o
像使用String那样不进行类型转换:
o=((String)o)。子字符串(1)


在您的情况下,数组中的所有引用
allShips
都具有类型
Ship
。如果您知道某个数组元素的实际类型是
Ship
子类,则可以像上面那样强制转换实际类型。但这是一种不好的做法,不应该在现实世界中使用。

你不能这样做。在java中,引用变量有两种类型:引用类型和实际对象类型。因此,当您编写类似于
Object o=“12345”
的东西时,
o
具有type
Object
(而不是
String
),并且您不能使用
o
像使用String那样不进行类型转换:
o=((String)o)。子字符串(1)


在您的情况下,数组中的所有引用
allShips
都具有类型
Ship
。如果您知道某个数组元素的实际类型是
Ship
子类,则可以像上面那样强制转换实际类型。但这是一种不好的做法,不应该在现实世界中使用。

您可以在将对象存储到阵列中之前初始化它们:

{
    Ship ships = new Ship();
    CargoShip cargoShips = new CargoShip();
    CruiseShip cruiseShips = new CruiseShip();

    Ship[] allShips = {ships, cargoShips, cruiseShips};

    allShips[0].setShipName("Boom");
    allShips[0].setYearBuilt("1900");
    allShips[1].setShipName("Bang");
    allShips[1].setCargoCapaicty(200);
    allShips[2].setShipName("Bam");
    allShips[2].setMaxPassengers(500);


    for (int i = 0; i < allShips.length; i++)
    {
        System.out.println(allShips[i]);
    }
}

您可以在将对象存储到阵列中之前对其进行初始化:

{
    Ship ships = new Ship();
    CargoShip cargoShips = new CargoShip();
    CruiseShip cruiseShips = new CruiseShip();

    Ship[] allShips = {ships, cargoShips, cruiseShips};

    allShips[0].setShipName("Boom");
    allShips[0].setYearBuilt("1900");
    allShips[1].setShipName("Bang");
    allShips[1].setCargoCapaicty(200);
    allShips[2].setShipName("Bam");
    allShips[2].setMaxPassengers(500);


    for (int i = 0; i < allShips.length; i++)
    {
        System.out.println(allShips[i]);
    }
}

您可以在将对象存储到阵列中之前对其进行初始化:

{
    Ship ships = new Ship();
    CargoShip cargoShips = new CargoShip();
    CruiseShip cruiseShips = new CruiseShip();

    Ship[] allShips = {ships, cargoShips, cruiseShips};

    allShips[0].setShipName("Boom");
    allShips[0].setYearBuilt("1900");
    allShips[1].setShipName("Bang");
    allShips[1].setCargoCapaicty(200);
    allShips[2].setShipName("Bam");
    allShips[2].setMaxPassengers(500);


    for (int i = 0; i < allShips.length; i++)
    {
        System.out.println(allShips[i]);
    }
}

您可以在将对象存储到阵列中之前对其进行初始化:

{
    Ship ships = new Ship();
    CargoShip cargoShips = new CargoShip();
    CruiseShip cruiseShips = new CruiseShip();

    Ship[] allShips = {ships, cargoShips, cruiseShips};

    allShips[0].setShipName("Boom");
    allShips[0].setYearBuilt("1900");
    allShips[1].setShipName("Bang");
    allShips[1].setCargoCapaicty(200);
    allShips[2].setShipName("Bam");
    allShips[2].setMaxPassengers(500);


    for (int i = 0; i < allShips.length; i++)
    {
        System.out.println(allShips[i]);
    }
}
试试这个。它会起作用的

试试这个。它会起作用的

试试这个。它会起作用的

试试这个。它会起作用的