Java 接口如何具有对象类方法的可访问性?
我从Oracle文档中获得了以下信息: 如果一个接口没有直接的超级接口,那么该接口隐式声明一个公共抽象成员方法m,其签名为s,返回类型为r,并抛出与每个公共实例方法m对应的子句t,该方法的签名为s,返回类型为r,抛出子句t在Object中声明,除非具有相同签名的方法,相同的返回类型,并且接口显式声明了一个兼容的throws子句 有人能告诉我,一个接口如何能够隐式地向每个公共实例方法声明公共抽象方法,而这些方法在对象类中不是最终可用的Java 接口如何具有对象类方法的可访问性?,java,interface,Java,Interface,我从Oracle文档中获得了以下信息: 如果一个接口没有直接的超级接口,那么该接口隐式声明一个公共抽象成员方法m,其签名为s,返回类型为r,并抛出与每个公共实例方法m对应的子句t,该方法的签名为s,返回类型为r,抛出子句t在Object中声明,除非具有相同签名的方法,相同的返回类型,并且接口显式声明了一个兼容的throws子句 有人能告诉我,一个接口如何能够隐式地向每个公共实例方法声明公共抽象方法,而这些方法在对象类中不是最终可用的 interface Test { public voi
interface Test {
public void functionA();
}
class child implements Test{
public void functionA() {
}
public static void main(String[] args) {
Test test = new child();
test.toString(); // since toString is Objects class method, How it's visible for Test interface ref?
}
}
接口如何能够隐式地向对象类中不可用的每个公共实例方法声明公共抽象方法
interface Test {
public void functionA();
}
class child implements Test{
public void functionA() {
}
public static void main(String[] args) {
Test test = new child();
test.toString(); // since toString is Objects class method, How it's visible for Test interface ref?
}
}
接口不能做到这一点——只有具体的对象才能做到。我猜您看到的代码显示了从接口创建匿名内部类,并认为这是接口的实例化,但事实并非如此。相反,它是一个具体的类,一个没有名字的类,它实现了接口,并且像所有具体的类一样从Object扩展而来
现在我不太确定这是怎么编译的:
public interface MyInterface {
void foo();
@Override
String toString();
@Override
boolean equals(Object o);
}
正确的答案可能是:因为Java的作者就是这么想的
接口如何具有对象类方法的可访问性
与往常一样,答案在JLS中:
4.10.2。类和接口类型之间的子类型
给定非泛型类型声明C,类型C的直接超类型如下所示:
- C的直接超类(§8.1.4)
- C的直接上界面(§8.1.5)
- 类型对象,如果C是没有直接超级接口的接口类型(§9.1.3)
对象的子类型
,接口继承其方法
注意:对于通用接口也是如此(在4.10.2的其余部分中解释)。作为社区wiki回答,因为我只是猜测这个问题的含义;)。。。。现在我不太确定他是否错了。投票重新开放。1+表示对问题的改进。@JonK:请阅读已编辑的问题。@luk2302:请阅读已编辑的问题。我投票决定重新打开它。@sstan:我同意,我最初投票决定关闭它,但这就是这个网站的魅力所在——你可以改进你的问题和答案。