让我们考虑以下示例。
public interface SimpleInterface {
public void simpleMethod();
}
public class SimpleClass implements SimpleInterface{
public static void main(String[] args) {
SimpleInterface iRef = new SimpleClass();
SimpleClass cRef = new SimpleClass();
iRef.simpleMethod(); // Allowed. Calling methods defined in interface via interface reference.
cRef.specificMethod(); // Allowed. Calling class specific method via class reference.
iRef.specificMethod(); // Not allowed. Calling class specific method via interface reference.
iRef.notify(); // Allowed????
}
public void specificMethod(){}
@Override
public void simpleMethod() {}
}
我想,在使用接口引用的Java中,我们可能只访问在此接口中定义的方法。但是,似乎允许通过任何接口引用访问类Object的方法。我的具体类“SimpleClass”继承了Object类所具有的所有方法,并且类Object确实没有实现任何接口(假设Object使用notify,wait等方法实现某些接口)。我的问题是,为什么允许通过接口引用访问类Object的方法,考虑到我的具体类中的其他方法是不允许的?
答案 0 :(得分:9)
为什么允许它通过接口引用
访问类Object
的方法
您可以使用接口引用调用Object
类方法,尽管接口不会从Object
类扩展,因为Java中的每个根接口都有对应于{的每个方法的隐式方法声明{1}}上课。
界面的成员是:
- 如果接口没有直接的超级接口,则接口 隐式声明带有签名的公共抽象成员方法m s,返回类型r,以及对应于每个公共的throws子句t 具有签名s的实例方法m,返回类型r和throws子句t 在Object 中声明,除非具有相同签名的方法相同 返回类型,并且显式声明了兼容的throws子句 界面。
答案 1 :(得分:1)
这是因为Java确保任何已实现X
接口的类肯定也是Object类,因此可以调用wait()
,notify()
和其他对象人