有关接口引用变量的问题

Laa*_*nya 4 java interface

我研究过在实例方法的情况下,在运行时jvm使用实际的实例类,在类方法的情况下,编译器只会查看引用变量的声明类型而不是实际的类.

我研究了这个概念实例方法隐藏..

在我的proram中,我使用了接口引用变量来存储类的对象,并尝试使用它来访问类的实例方法,但它引发了错误.我的程序如下:

interface A
{
   void show();
}
class B implements A
 {
   public void show()
   {
      System.out.println("Interface Method");
   }
    void info()
  {
     System.out.println("IN Info");
  }
}
class interDemo
{
   public static void main(String args[])
  {
     A a;
     B b=new B();
      a=b;
      a.show();
      a.info();
  }
}
Run Code Online (Sandbox Code Playgroud)

请帮我理解一下...

sjr*_*sjr 7

编译器告诉您该类型A没有名为infodefined 的方法.这是正确的:编译器不知道在运行时,a实际的类型,B具有该info方法.允许a.info()调用实际编译并发送到字节码是不安全的,没有什么可以说a永远是类型的B.

这称为静态类型.在Java和其他静态类型语言中,您需要"强制转换"变量以强制编译器将其视为另一种类型.在这种情况下,你可以写((B) a).info().