为何无法将飞行类对象添加至Flyable类型ArrayList集合?
问题解决方案
错误原因分析
- 第一个错误:
flyingThings.add("myPlane")传入的是字符串字面量,而ArrayList<Flyable>只能接收实现了Flyable接口的对象,不是字符串。你混淆了变量名和字符串,直接传变量名即可,不需要加双引号。 - 第二个错误:
Flyable是抽象接口,Java中接口不能直接通过new关键字实例化,必须使用实现该接口的具体类(比如Plane、Hangglider、Bird)的实例对象。
修正后的代码
package labInterface; import java.util.ArrayList; public class App { /** * @param args */ public static void main(String[] args) { Plane myPlane = new Plane(4, "Boing 747"); System.out.printf("myPlane: %s%n", myPlane); Hangglider myHangglider = new Hangglider(true); System.out.printf("myHangglider: %s%n", myHangglider); Bird myBird = new Bird("Swallow"); System.out.printf("myBird: %s%n", myBird); ArrayList<Flyable> flyingThings = new ArrayList<Flyable>(); // 直接传入已创建的对象引用,无需加引号 flyingThings.add(myPlane); flyingThings.add(myHangglider); flyingThings.add(myBird); } }
额外注意事项
确保Plane、Hangglider、Bird三个类都正确实现了Flyable接口,即重写了接口中定义的所有抽象方法,示例如下:
public class Plane implements Flyable { // 类的成员变量和构造方法 // 实现Flyable接口的抽象方法 @Override public void fly() { // 自定义飞行逻辑实现 } }
内容的提问来源于stack exchange,提问作者HalfokayCS
相关产品推荐
相关产品推荐

