Java-试图分配较弱的类特权



我正在学习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修饰符。

您需要了解Javaaccess modifiers的总统职位。如果你想要override一些方法,你需要修饰符具有更高的总统

最新更新