Java中合并子类ArrayList并调用父类方法的实现求助
解决Java子类集合合并后无法调用父类方法的问题
你遇到的核心问题是用了ArrayList<Object>作为合并后的集合类型,导致无法直接调用SuperHero的方法——因为Object类根本没有这些方法。正确的做法是利用Java的多态特性,用父类SuperHero作为集合的泛型类型,具体步骤如下:
创建父类泛型的集合
定义一个泛型为SuperHero的ArrayList,因为WaterHero和LandHero都继承自SuperHero,所以它们的实例都可以存入这个集合:ArrayList<SuperHero> allSuperHeroes = new ArrayList<>();合并原有两个集合
使用addAll()方法直接将两个子类集合的元素全部添加到新集合中:allSuperHeroes.addAll(allHeroes); allSuperHeroes.addAll(allHeroes2);直接调用父类方法
现在遍历这个集合时,每个元素的类型都是SuperHero,可以直接调用getName()等父类中定义的方法,无需强制转换:for (SuperHero hero : allSuperHeroes) { System.out.println("英雄名称:" + hero.getName()); // 还可以调用SuperHero中定义的其他方法,比如getHp()、getAttack()等 }
为什么这种方式可行?
Java的多态特性允许子类对象向上转型为父类类型,所以WaterHero和LandHero的实例都可以被当作SuperHero来处理。用ArrayList<SuperHero>作为集合类型,既保证了类型安全,又能直接调用父类的所有公共方法,避免了ArrayList<Object>需要强制转换的麻烦和潜在的类型转换异常。
内容的提问来源于stack exchange,提问作者Ola Magnell
相关产品推荐
相关产品推荐

