【问题标题】:Why should I declare implemented interface methods as "public"?为什么我应该将实现的接口方法声明为“公共”?
【发布时间】:2017-09-13 20:53:35
【问题描述】:
interface Rideable {
    String getGait();
}

public class Camel implements Rideable {
    int weight = 2;

    String getGait() {
        return " mph, lope";
    }

    void go(int speed) {++speed;
        weight++;
        int walkrate = speed * weight;
        System.out.print(walkrate + getGait());
    }

    public static void main(String[] args) {
        new Camel().go(8);
    }
}

在编译上述代码时,我遇到了一个编译错误,与getGait() 方法的访问修饰符有关。请解释一下,我为什么要声明getGait()public 访问修饰符?

【问题讨论】:

标签: java interface scope access-specifier


【解决方案1】:

CamelgetGait() 实现了Rideable 接口的一个方法。所有接口方法默认都是public(即使你没有在接口定义中明确指定),所以所有实现方法也必须是公共的,因为你不能降低接口方法的可见性。

【讨论】:

    【解决方案2】:

    在接口中,您将方法getGait() 声明为public。即使您没有在接口中将方法声明为公共,它也是公共的。

    但是在您的班级中,您已将此方法声明为package private。这是不允许的,因为它会降低 已实现方法的可见性。

    为了避免这个问题。要么在你的类中将此方法声明为 public,要么删除声明 (implements Rideable) 你的类使用此方法签名实现接口。

    【讨论】:

    • @Rafeal Osipov 你能帮我理解junit的功能和非功能要求是什么
    • @AkhilVijayan 我不明白你的问题。请详细说明。
    【解决方案3】:

    根据面向对象的基本原理,接口只包含公共方法。所以当你实现接口时,你应该将它声明为 public ,否则它会给你编译时错误。

    谢谢。

    【讨论】:

      【解决方案4】:

      接口的基本用途之一是检查一致性。例如,实现Comparable 接口的类必须提供compareTo 方法,因此提供了一种比较类对象的机制。 这些方法公开的原因是任何利用这种一致性的类都必须能够不受任何限制地使用这些方法。例如,Arrays 类的 sort 方法将足以对类的对象进行排序,前提是它实现Comparable 并公开了compareTo 方法(如果这是您要提供的排序机制。当然Comparator 也在那里)。所以简而言之,合约只有在接口的情况下可读或可用时才足够好(从而使方法public命令式)。

      【讨论】:

        【解决方案5】:

        在接口中,字段隐式为public static final,接口中的方法默认为public

        请阅读继承规则:

        http://www.codejava.net/java-core/the-java-language/12-rules-of-overriding-in-java-you-should-know

        其中之一说,“重写方法不能有更多限制性的访问修饰符”。所以你在 Camel 类中覆盖了 getGait()。如果您没有在类的方法中提供访问修饰符,则默认为 default。这意味着您将访问修饰符从public 限制为default。因此打破了过度监管的规则,这就是它抱怨的原因。

        【讨论】:

          猜你喜欢
          • 2023-03-13
          • 2023-03-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-11-06
          • 2011-04-30
          • 1970-01-01
          • 2010-10-13
          相关资源
          最近更新 更多