Java 从扩展类铸造

Java 从扩展类铸造,java,inheritance,casting,Java,Inheritance,Casting,我正在尝试访问类武器,以便可以使用方法getName(), 这就是为什么我在我的getFleetWeaponNames方法中声明了w1,但因为类巡洋舰和驱逐舰没有扩展武器类,我无法将它们投射到武器 public class Cruiser extends Spacecraft implements ISpacecraft public class Destroyer extends Spacecraft implements ISpacecraft 错误: 线程“main”java.lang.

我正在尝试访问类
武器
,以便可以使用方法
getName()
, 这就是为什么我在我的
getFleetWeaponNames
方法中声明了
w1
,但因为类
巡洋舰
驱逐舰
没有扩展
武器
类,我无法将它们投射到
武器

public class Cruiser extends Spacecraft implements ISpacecraft
public class Destroyer extends Spacecraft implements ISpacecraft
错误:

线程“main”java.lang.ClassCastException中的异常: 星际舰队。巡洋舰不能投射到星际舰队。武器在 StarfleetManager.getFleetWeaponNames(StarfleetManager.java:102)

/**
*返回安装在任何船只上的舰队所有武器的所有名称的字符串数组列表,不重复
*依次递增
*/
公共静态ArrayList getFleetWeaponNames(ArrayList fleet)
{
武器w1;
ArrayList helpArraylist=新的ArrayList(车队);
Collections.sort(helpArraylist,Comparator.comparating(ISpacecraft::getName));
ArrayList arraylistOfStrings=新的ArrayList();
对于(int i=0;i
但是因为巡洋舰和驱逐舰没有扩展武器等级,所以它没有给我一个武器参考的施放机会
-看来你已经知道问题的原因了。他与我无关,我正在寻找一种能够使用getName()的方法武器分类中的方法在我看来,您正在寻找一种方法,将
航天器
投射到
武器
,两者都没有共同之处。你认为这将如何工作?Marvin说到了,这不是一个技术问题,而是你的领域设计的问题。
/**
 * Returns an Arraylist of Strings of all names of all the fleet's weapons installed on any ship, without repetitions
 * in increasing order
 */
public static ArrayList<String> getFleetWeaponNames (ArrayList<ISpacecraft> fleet)
{
    Weapon w1;
    ArrayList<ISpacecraft> helpArraylist = new ArrayList<>(fleet);
    Collections.sort(helpArraylist , Comparator.comparing(ISpacecraft::getName));
    ArrayList<String> arraylistOfStrings = new ArrayList<String>();
    for(int i = 0 ; i < helpArraylist.size() ; i++)
    {   if(helpArraylist.get(i) instanceof Destroyer || helpArraylist.get(i) instanceof Cruiser )
        {
            w1 = (Weapon)helpArraylist.get(i);
            arraylistOfStrings.add(w1.getName());
        }
    }
    return arraylistOfStrings;
}