【问题标题】:trying to understand implicit superinterfaces试图理解隐式超接口
【发布时间】:2012-09-17 09:05:54
【问题描述】:

很抱歉带回dead。但是我还是不太清楚这部分规范的内容。

如果一个接口没有直接的超接口,则该接口 隐式声明一个带有签名的公共抽象成员方法 m s,返回类型 r,以及每个 public 对应的 throws 子句 t 具有签名 s、返回类型 r 和 throws 子句 t 的实例方法 m 在 Object 中声明,除非方法具有相同的签名,相同 返回类型,并且兼容的 throws 子句由 界面。如果接口显式,则为编译时错误 在 m 被声明为 final 的情况下声明这样的方法 m 在对象中。

给定

interface Testing
{
    void test();
}
public class Test{
    public static void main(String[] args) {
        Testing t = new Testing(){
            @Override
            public void test(){
            }
        };
        t.test();
        t.toString();
    }
}

现在,正如规范所述,上述内容将更改为

    interface Testing
    {
        void test();
        String toString();
        //other non-final methods of Object
    }
    public class Test{
        public static void main(String[] args) {
            Testing t = new Testing(){
                @Override
                public void test(){
                }
            };
            t.test();
            t.toString(); 
        }
    }

还有。请确认是否存在接口层次结构,然后它们都将获得这些抽象方法。

【问题讨论】:

  • 您的问题到底是什么?每个类都继承 Object 的方法,而不管实现的接口如何
  • 我的问题是——“我的理解正确吗?”还有“这有什么必要?”
  • 是的,您的理解是正确的。只要您在接口中有显式或隐式的方法。对于使用它们的其他类或接口无关紧要

标签: java


【解决方案1】:

这意味着每个类都扩展了 Object(在其类层次结构中的某个点)。但是,接口不扩展 Object。这是为了避免多重继承带来的问题。

由于接口不扩展Object,这意味着如果我们可以访问的对象的类型(不是类)是接口,我们就无法使用像toString 这样的方法。但是我们知道这些方法必须是可用的,因为所有类都从Object 扩展而来。因此,为了解决这个问题,所有Object 的非最终方法都在所有没有超接口的接口中隐式声明。这些方法的这些约定总是得到满足,因为所有类都必须在某个时候从 Object 扩展。

TL;DR - 当我们有一个存储在类型为接口的变量中的某个类的实例(例如Serializable)时,确保我们可以访问Object 提供的方法是一个技巧

编辑:回答你的问题,你有点不对劲。 Object 的所有非最终方法都添加到接口(无论是否使用),如果该接口没有父接口并且每个要添加的方法:接口明确声明没有匹配的方法。

【讨论】:

  • 我以为OP的问题是please confirm if there is an hierarchy of interfaces then all of them get these abstract methods这个?我错过了什么吗?
  • @sasidhar:这是我的第二个问题
【解决方案2】:

只要接口没有超接口,它就会获得 Object 类方法的隐式声明。只要这些方法都包含在接口中。每个扩展或实现此接口的接口在此接口显式声明或隐式声明的方法之间没有太大区别。在那一点上,该接口与明确声明它们一样好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-01
    • 2020-08-18
    • 1970-01-01
    • 1970-01-01
    • 2018-09-23
    • 2023-03-03
    • 2017-05-24
    相关资源
    最近更新 更多