我正在学习Java(完整)初学者,并从我的代码中获得以下错误。我自己也花了些时间想弄明白,但运气不太好。
错误:FlatScreen中的亮度(int)无法实现电子器件中的亮度(int)void亮度(int newBrightness) {试图分配较弱的访问权限;是公共
public class NewTV {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
FlatScreen fS = new FlatScreen();
fS.Power("On");
fS.Brightness(10);
}
}
interface electronics {
void Power(String newPower);
void Brightness(int newBrightness);
}
class FlatScreen implements electronics {
String Power;
int Brightness;
void Power (String newPower) {
Power = newPower;
System.out.println("Power: " + Power);
}
void Brightness (int newBrightness) {
Brightness = newBrightness;
System.out.println("Brightness: " + newBrightness);
}
}
接口方法都是公共的,即使public
关键字不存在。实现接口的类必须使其实现的所有方法都是公共的,并且public
关键字必须存在。
接口中的方法默认为public
。然而,默认情况下,类中的方法被称为package-private
。由于这比接口中可用的public
修饰符更具限制性,因此不能这样做。相反,在实现该方法时必须显式地使用public
访问修饰符。
这适用于扩展或实现基类的所有情况;所有被覆盖的方法必须至少与要覆盖的方法一样可见。您可以自由地使方法more广泛可见,但不能使less。
对于为什么不能这样做的一个例子,考虑下面的代码:electronics e = new FlatScreen();
e.Brightness(5); // the interface says I can call this, but the implementation says I can't!
use
public void Power (String newPower) {
Power = newPower;
System.out.println("Power: " + Power);
}
public void Brightness (int newBrightness) {
Brightness = newBrightness;
System.out.println("Brightness: " + newBrightness);
}
interfaces
中的方法默认为public
。为了override
public
方法,你需要有public
修饰符。
您需要了解Java
中access modifiers
的总统职位。如果你想要override
一些方法,你需要修饰符具有更高的总统