Java 为什么我可以访问对象';通过不使用';你不能给他们下定义吗?

Java 为什么我可以访问对象';通过不使用';你不能给他们下定义吗?,java,Java,给定以下接口和实现类: public interface MyInterface { public String getSomething (); } public class MyImplementation implements MyInterface { @Override public String getSomething () { return "Someting"; } public String getOtherThing () {

给定以下接口和实现类:

public interface MyInterface {
  public String getSomething ();
}

public class MyImplementation implements MyInterface {

   @Override
   public String getSomething () {
      return "Someting";
   } 

   public String getOtherThing () {
      return "otherThing";
   }
}
然后是一些客户端代码:

MyInterface objectViaMyInt = new MyImplementation();

objectViaMyInt.getSometing();   //WORKS, OF COURSE
objectViaMyInt.getOtherThing(); //DOESNT WORK, OF COURSE
objectViaMyInt.toString();      // WORKS TOO
所以,我想我理解这件事的精神。。每个对象都是一个对象,应该继承这些基本方法。但这实际上是如何工作的呢?它似乎不能遵循继承和基于接口(类型)的访问的正常规则

但这实际上是如何工作的呢

在语言层面上,它之所以有效,是因为它说:

如果一个接口没有直接的超级接口,那么该接口隐式声明一个公共抽象成员方法m,其签名为s,返回类型为r,并抛出与每个公共实例方法m对应的子句t,该方法的签名为s,返回类型为r,抛出子句t在Object中声明,除非具有相同签名的方法,相同的返回类型,并且接口显式声明了一个兼容的throws子句


在JVM级别上,JVM只需知道接口的每个实例显然都必须是一个对象,这样就可以以正常的方式获得正确的成员实现。

+1您如何才能找到这么大、这么快的JLS中的任何段落的确切位置?:)规范已经说明了!!我应该知道的。@Rohit Jain我想他脑子里有一个常驻搜索索引。@RohitJain:搜索接口章节不需要太长时间,然后找到“成员”部分…@RohitJain Bookmark按CTRL/CMD+FB键,因为接口通常不能从类继承,对吗?我的实现类继承自object,但是什么规则允许过滤对象方法,而不是特定于impl的方法。顺便说一句,我知道这是一个重复的问题,但是其他问题的编写对于这样一个重要的问题来说不够清楚。