我有一个界面和三个类。在课程B
中,我定义了一个名为printHello
的方法。然后,在课程Test
中,我声明一个新的IHello
对象并将其分配给新的B.
问题是,代码无法编译,因为我收到一条错误,指出“类型IHello的方法printHello()未定义”。这让我感到困惑,因为我能够将IHello
类型的对象分配给新的B
,所以即使该对象也不能使用B
的方法,界面没有它们?
要解决这个问题,我知道我可以在printHello
接口中声明一个名为IHello
的方法,或者我可以声明类型B的对象。我还能做些什么来解决这个问题吗?
接口IHello
public interface IHello {
void hello();
}
A类
public class A implements IHello{
public void hello(){
System.out.println("hello");
}
}
B类
public class B extends A {
public void printHello(){
this.hello();
}
}
班级考试
public class Test {
public static IHello b;
public static void main(String[] args) {
b = new B();
b.printHello(); //The method printHello() is undefined for type IHello
}
}
答案 0 :(得分:2)
B类扩展了A类,您的A类或B类都没有与Interface IHello的关系,因此您无法实例化B并将其分配给b
,因为b
的类型为{{1} }}
如果您的A类是接口IHello
的实现,则应将其设为
IHello
请注意,如果将实例变量x声明为XXX类型,则只有类XXX中的方法对实例x可见。在您的情况下,您将b声明为IHello,实例b只能访问方法hello(),它无法访问public class A implements IHello{
...
}
,只有声明为printHello()
的实例才能调用B
,如果您是100%确定b是B的实例,您可以将实例b转换为B类型。