无法从实现接口的类实现方法?

 琼小海 发布于 2023-01-19 11:02

我开始认为我不像我想的那样理解多态性.

我有以下情况:

public class Testing {
    public static void main(String[] args){
        interTest myTest = new classTest();
        myTest.classMethod();

    }
}

使用给定的界面:

public interface interTest {

    public boolean checkBoolean();
    public void method();

}

然后是具体的课程:

public class classTest implements interTest{

    public classTest() {
        // TODO Auto-generated constructor stub
    }

    public void classMethod(){
        System.out.println("fail");
    }

    // Both method() and checkBoolean() are overridden here & do nothing.

    }

}

Oracle文档演示了如何实现接口然后添加其他方法,甚至实现多个接口(因此包括不在其中一个接口中的方法),我认为这很常见,直到我遇到试图自己尝试这样做的问题.

在这种情况下,我无法访问,classMethod因为它不在界面内.

The method classMethod() is undefined for the type interTest

我对多态性的理解是什么?我想在表单中声明一个变量:

Interface object = new ConcreteClass();

创建了一个可以访问ConcreteClass()方法的接口对象.这就是如何创建多个对象,这些对象都是相同的类型(接口),并且可以适合特定于类型的列表但是不同.

为什么我不能调用这个myTest.classMethod()方法?

1 个回答
  • 在编译时,方法根据调用它们的表达式的类型来解析.

    Interface object = new ConcreteClass();
    object.classMethod();
    

    在未声明或具有可见方法classMethod()的类型的变量上调用Interface该方法classMethod().

    该类型ConcreteClass确实声明了这样的方法,所以你可以这样做

    ConcreteClass object = new ConcreteClass();
    object.classMethod();
    

    甚至

    ((ConcreteClass) object).classMethod();
    

    如果你确定object是引用一个ConcreteClass对象.否则你会得到一个ClassCastException运行时间.


    基本上,您需要了解编译时类型和静态类型与运行时类型和动态类型之间的区别.

    Interface object = new ConcreteClass();
    

    静态类型objectInterface.在运行时,变量引用类型的对象ConcreteClass,因此其运行时类型为ConcreteClass.

    2023-01-19 11:05 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有