Java 当子类对象存储在超类数组中时,如何调用子类方法? { 船舶=新船舶(); 货船货船=新货船(); CruiseShip CruiseShip=新CruiseShip(); 船舶[]所有船舶={船舶、货船、游轮}; 所有船舶[0]。设置船舶名称(“Boom”); 所有船舶[0].SetYearBuild(“1900”); 所有船舶[1]。设置船舶名称(“Bang”); 所有船舶[1]。集货能力(200); 所有船舶[2]。设置船舶名称(“Bam”); 所有船舶[2]。设置最大乘客数(500); for(int i=0;i
因此,船舶级别是超级级别,而货船和邮轮都扩展了船舶级别。我已将这3个对象存储到一个舰船阵列中。setCargoCapacity和SetMaxPassentials是仅出现在子类中的方法。由于某些原因,我无法访问它们。我不知道如何创建它,以便也可以访问子类方法。您不能调用从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,如果是,您可以对其进行强制转
船舶[]
中选择的船舶的设置载货能力
,因为该船舶可能不是货船
。您必须在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
具有typeObject
(而不是String
),并且您不能使用o
像使用String那样不进行类型转换:o=((String)o)。子字符串(1)代码>
在您的情况下,数组中的所有引用allShips
都具有类型Ship
。如果您知道某个数组元素的实际类型是Ship
子类,则可以像上面那样强制转换实际类型。但这是一种不好的做法,不应该在现实世界中使用。你不能这样做。在java中,引用变量有两种类型:引用类型和实际对象类型。因此,当您编写类似于Object o=“12345”
的东西时,o
具有typeObject
(而不是String
),并且您不能使用o
像使用String那样不进行类型转换:o=((String)o)。子字符串(1)代码>
在您的情况下,数组中的所有引用allShips
都具有类型Ship
。如果您知道某个数组元素的实际类型是Ship
子类,则可以像上面那样强制转换实际类型。但这是一种不好的做法,不应该在现实世界中使用。你不能这样做。在java中,引用变量有两种类型:引用类型和实际对象类型。因此,当您编写类似于Object o=“12345”
的东西时,o
具有typeObject
(而不是String
),并且您不能使用o
像使用String那样不进行类型转换:o=((String)o)。子字符串(1)代码>
在您的情况下,数组中的所有引用allShips
都具有类型Ship
。如果您知道某个数组元素的实际类型是Ship
子类,则可以像上面那样强制转换实际类型。但这是一种不好的做法,不应该在现实世界中使用。你不能这样做。在java中,引用变量有两种类型:引用类型和实际对象类型。因此,当您编写类似于Object o=“12345”
的东西时,o
具有typeObject
(而不是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]);
}
}
试试这个。它会起作用的
试试这个。它会起作用的
试试这个。它会起作用的
试试这个。它会起作用的