我用Java写了一个接口。之后,我试图通过重写来实现它,如代码中所示。但是我得到了一个错误,我必须在方法之前添加public。
为什么我必须添加public ?为什么没有public就不行呢?
正如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);
}
}
接口中的所有方法都是公共的。
类中没有可见性修饰符的所有方法都是包私有的。
你不能将public方法的可见性降低为package-private,因为它违反了接口。
因为在接口中,所有方法默认都是public,而在类中,方法的默认可见性是"friend"——在同一个包中可见。
你不能在实现一个方法时缩小可见性,这是规则。
让我们假设你有一个Printable接口,它包含一个方法print()。
interface Printable{
int MIN=5;
void print();
}
现在因为方法是在接口内部声明的,所以编译器会在方法之前隐式地添加公共抽象。像这样:编译器接口
现在作为方法被声明为public,所以现在当你扩展方法时,你必须在方法之前添加public。
我想这可能对你有帮助。