Java 为什么我要将实现的接口方法声明为;“公共”吗;?

Java 为什么我要将实现的接口方法声明为;“公共”吗;?,java,interface,scope,access-specifier,Java,Interface,Scope,Access Specifier,编译上述代码时,我遇到了一个编译错误,与getGait()方法的访问修饰符有关。请解释,为什么我要用publicaccess修饰符声明getGait()?Camel的getGait()实现了可驾驶的接口的方法。默认情况下,所有接口方法都是public(即使您没有在接口定义中明确指定),因此所有实现方法也必须是public,因为您无法降低接口方法的可见性。在接口中,您将方法getGait()声明为public。即使您没有在方法是公共的接口中将其声明为公共的 但在您的类中,您已将此方法声明为。这是不

编译上述代码时,我遇到了一个编译错误,与
getGait()
方法的访问修饰符有关。请解释,为什么我要用
public
access修饰符声明
getGait()
Camel
getGait()
实现了
可驾驶的接口的方法。默认情况下,所有接口方法都是
public
(即使您没有在接口定义中明确指定),因此所有实现方法也必须是public,因为您无法降低接口方法的可见性。

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

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


为了避免这个问题。在类中将此方法声明为公共的,或者删除类使用此方法签名实现接口的声明(
实现可RIDABLE
)。

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


谢谢。

在界面中,字段是隐式的
public static final
,界面中的方法默认为
public

请阅读继承规则:


其中一条说,“重写方法不能有更严格的访问修饰符”。因此,您正在
Camel
类中验证
getGait()。如果您没有在类的方法中提供访问修饰符,那么默认情况下,它的默认值为
default
。这意味着您将访问修饰符从
public
限制为
default
。因此,它打破了ovvering规则,这就是它抱怨的原因

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

您应该阅读以下内容:@Rafeal Osipov您能帮助我了解junit的功能性和非功能性需求吗please@AkhilVijayan我不明白你的问题,请详细说明。
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);
    }
}