我可以创建一个接口对象并在不覆盖它的情况下访问实现该接口的 java 文件的功能吗?

Posted

技术标签:

【中文标题】我可以创建一个接口对象并在不覆盖它的情况下访问实现该接口的 java 文件的功能吗?【英文标题】:Can i create an interface object and reach to the function of the java file that implements the interface without overriding it? 【发布时间】:2018-04-18 09:40:47 【问题描述】:

//接口类

public interface Square 

    public void printHeight();
    public void printWidth();

//实现接口类的java类

public class Square1 implements Square

    public void printHeight()
        System.out.println("height");
    

    public void printWidth()
         System.out.println("width");
    

//将创建对象接口而不覆盖方法的操作类 公共类测试扩展了 someabstractclass

    private Square perfectSquare;


    @Override
    public void print()
       perfectSquare.printHeight();
         

当运行这个 perfectSquare.printHeight() 时,它能够在控制台中显示

    height

它是如何工作的?

【问题讨论】:

就目前而言,这段代码甚至无法编译。 1. printHeight 和 printSquare 返回类型错误。 2.public void printWidth不是有效的java代码,你缺少() 谢谢@OHGODSPIDERS。我已经编辑了我犯的愚蠢错误。 【参考方案1】:

这个声明定义了一个接口类型的变量(Square):

private Square perfectSquare;

该变量可以包含对实现Square 接口的类(例如您的Square1 类)对象的引用。

因此,您可以在该变量上调用Square 接口的方法(例如perfectSquare.printHeight())。

当然,这假设您在使用变量之前对其进行了初始化。否则,您将在运行时收到 NullPointerException

鉴于您声称获得的“高度”输出,您可能为 perfectSquare 变量分配了 Square1 类的对象(在某些代码中您未包含在问题中)。

【讨论】:

以上是关于我可以创建一个接口对象并在不覆盖它的情况下访问实现该接口的 java 文件的功能吗?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不重新实现方法的情况下从外部接口继承接口

在不覆盖实时数据库的情况下查询 GCP Datastore 备份

如何在不覆盖先前值的情况下为同一个键设置多个值?

访问 VBA 以在不提示的情况下覆盖文件

4.AOP

如何在不知道其表的情况下删除约束?