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);
}
}