我用Java编写了一个接口。 之后,我尝试通过覆盖来实现它,如代码中所示。 但是我得到错误,我必须在方法之前添加公共。
为什么我要公开?为什么没有公开它不起作用?
正如Net-Beans所说:“试图分配较弱的访问权限;是公开的”
代码:
package tryinginterface;
interface Bicycle {
// wheel revolutions per minute
void changeCadence(int newValue);
void changeGear(int newValue);
void speedUp(int increment);
void applyBrakes(int decrement);
}
class ACMEBicycle implements Bicycle {
int cadence = 0;
int speed = 0;
int gear = 1;
@Override
void changeCadence(int newValue) {
cadence = newValue;
}
@Override
void changeGear(int newValue) {
gear = newValue;
}
@Override
void speedUp(int increment) {
speed = speed + increment;
}
@Override
void applyBrakes(int decrement) {
speed = speed - decrement;
}
@Override
void printStates() {
System.out.println("cadence:" +
cadence + " speed:" +
speed + " gear:" + gear);
}
}
答案 0 :(得分:8)
接口中的所有方法都是公开的。
没有可见性修饰符的类中的所有方法都是package-private。
您无法将公共方法的可见性降低到package-private,因为它违反了接口。
答案 1 :(得分:3)
因为在界面中,默认情况下所有方法都是公开,而在类中,方法的默认可见性是“friend” - 在同一个包中看到。
在实施方法时,您无法缩小可见性,这是规则。
答案 2 :(得分:0)
让我们假设您有一个接口Printable,其中包含方法print()。
interface Printable{
int MIN=5;
void print();
}
现在因为该方法是在接口中声明的,所以编译器会在该方法之前隐式添加公共摘要。。 像这样 :- interface for compiler
现在,由于该方法被声明为public,因此,当您扩展该方法时,必须在该方法之前添加public。
我认为这可能会对您有所帮助。