有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java为什么不能在接口类型上引用类的方法

为什么我们不能对实现该接口的接口类型调用类方法。。?有什么问题吗

Interface {
    void Iaminterfacemethod();
}

Class implements Interface {

    public void Iaminterfacemethod(){
        System.out.println("I'm class implements Interface");
    } 

    void classmethod() {
        System.out.println("I'm class Method");
    }

    public static void main(String[] args) {
        Interface O = new Class();
        O.classmethod(); --------->Why Not ?
    }
 }

如果接口类型可以引用类对象,那么为什么他不能访问类方法呢?因为在最后,这个调用将只对类的对象起作用。。不


共 (3) 个答案

  1. # 1 楼答案

    这就是继承的原理

    Interface O = new Class();
    

    这里O是接口的引用,因此O只知道接口中定义的方法

    您只能引用引用人知道的方法

  2. # 2 楼答案

    在编写代码、编译和运行时,会发生两件事

    1. 在编译时,编译器会检查您是否有正确的语法和方法/变量可访问性检查
    2. 现在,将在运行时创建对象,并执行铸造和/或装箱(在需要的地方)

    当你写作的时候

    <Interface> O = new <Class>();
    O.classmethod();  <-- will be checked at compile time
    

    所以,基本上,编译器将检查classmethodO引用是否存在,这是您的<Interface>

    现在,假设<Interface>已经由多个类实现,并且classmethod方法被不同的行为覆盖。然后,根据<Class>(实现<Interface>)的对象,该方法将在运行时动态绑定

  3. # 3 楼答案

    在子类或实现类中声明的方法不是超类/接口的一部分,因此不能调用在具有超类/接口引用类型的子类中声明的方法。编译器检查引用变量o是否有方法classmethod(),它没有