【问题标题】:Is interface required on a class extending an abstract class already implementing the interface?扩展抽象类的类是否需要接口已经实现了接口?
【发布时间】:2012-05-18 21:14:51
【问题描述】:

假设有这样的代码:

package com.ps.Sample;

public interface Sample
{
    public void Method1();
}

public abstract class AbstractSample implements Sample
{
    public void Method1()
    {
        System.out.println("Hello World");
    }
}

public class MySample extends AbstractSample
{

}

public class TestSample
{
    public static void main(String[] args) 
    {
        Sample my = new MySample();

        my.Method1();
    }

}

我的问题是: 将具体类声明为有什么好处

public class MySample extends AbstractSample implements Sample

而不是

public class MySample extends AbstractSample 

【问题讨论】:

  • 注意:抽象类实现了接口。

标签: java interface abstract-class


【解决方案1】:

不,没有。这是多余的。 AbstractSample 是一个样本,而 MySample 是一个 AbstractSample。所以 MySample 是一个样本。

无论您是否添加implements Sample,javadoc 都会显示所有已实现的接口。

【讨论】:

  • 尝试使用 Person 类来解释它,例如.. 我们不需要说老师是 Walker,因为老师是 Person,而 Person 已经是 Walker。 IMO 使用 Sample 解释它根本无法显示冗余。
  • 你刚刚做到了 :-) 我使用了与 OP 相同的类名。
【解决方案2】:

一个好处是,如果将 AbstractSample 更改为不实现 Sample,第一个声明仍然允许您将 MySample 的实例传递给期望 Sample 的方法。

【讨论】:

    猜你喜欢
    • 2010-10-21
    • 1970-01-01
    • 2011-02-11
    • 2019-05-22
    • 1970-01-01
    • 2011-09-16
    • 2012-10-08
    • 2016-04-28
    • 1970-01-01
    相关资源
    最近更新 更多