Java - попытка назначить более слабые привилегии класса

1

Я изучаю Java (полный) новичок и получаю следующую ошибку из своего кода. Я потратил некоторое время, пытаясь понять это сам, но не имел большой удачи.

Ошибка: Яркость (int) в FlatScreen не может реализовать Яркость (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);
    }
}
Теги:
compiler-errors

3 ответа

2

Методы интерфейса являются общедоступными, даже если ключевое слово public отсутствует. Классы, реализующие интерфейс, должны публиковать все их реализованные методы, и должно присутствовать public ключевое слово.

1

Методы в интерфейсе являются public по умолчанию. Однако методы в классе называются package-private по умолчанию. Поскольку это более ограничительный, чем public модификатор, доступный в интерфейсе, вам не разрешается это делать. Вместо этого вы должны явно использовать модификатор public доступа при реализации метода.

Это относится ко всем ситуациям, в которых вы расширяете или реализуете базовый класс; все переопределенные методы должны быть как минимум видимыми, как метод, который вы переопределяете. Вы можете сделать метод более широко видимым, но не менее.

Например, почему вы не можете этого сделать, рассмотрите этот код:

electronics e = new FlatScreen();
e.Brightness(5); // the interface says I can call this, but the implementation says I can't!
0

использование

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 модификатор.

Вам нужно узнать о президентстве access modifiers в Java. Если вы хотите override какой-либо метод, вам нужен модификатор с более высоким президентством.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню