编译以下代码时,编译器将显示一个错误:
InterfaceTest.java:19:错误:找不到符号knightObj.dispBK();
public class InterfaceTest{
public static interface Knight{
public void embark();
}
public static class BraveKnight implements Knight{
private int id;
public BraveKnight(int id){
this.id = id;
}
public void dispBK(){
System.out.println("ID: "+id);
}
public void embark(){
System.out.println("ID: "+id);
}
}
public static void main(String[] args){
Knight knightObj = new BraveKnight(101);
knightObj.dispBK();
}
}可能的原因是什么?
发布于 2014-08-07 11:19:23
As 在文件中说明
定义新接口时,将定义新的引用数据类型。您可以在任何可以使用任何其他数据类型名称的地方使用接口名称。如果定义了一个类型为接口的引用变量,则分配给它的任何对象都必须是实现该接口的类的实例。
dispBK()是类的方法。& Knight是接口,方法没有在接口中声明,所以您不能。
加:
public void dispBK();在您的界面中,然后它将工作。
只有在接口中声明了所有方法时,接口引用才能保存IMPL对象。
否则,您必须使用Impl对象访问该方法。
发布于 2014-08-07 11:16:51
Knight是您的接口,它没有定义一个名为dispBK()的方法。knightObj对象的类型为Knight,因此需要将其转换为BraveKnight,以便能够调用dispBK()方法。
或者,您可以将dispBK()方法添加到您的接口中。
第三个选项是像这样初始化对象:BraveKnight knightObj = new BraveKnight(101);。
我热情地推荐使用一些IDE,比如Eclipse,它们会捕获像这样简单的错误。
发布于 2014-08-07 11:18:26
将公共空dispBK()添加到接口中,然后可以实现它
https://stackoverflow.com/questions/25181088
复制相似问题