Ошибка в андроид студии?Не удается получить доступ к защищенному члену в подклассе - PullRequest
0 голосов
/ 21 мая 2018

Смотри, PlanetShape расширяет форму!Look, PlanetShape extends Shape! И все же он говорит, что isOverlapMethodLevel имеет защищенный доступ в Shape!And yet it says isOverlapMethodLevel have protected access in Shape!

Я только что обнаружил ошибку в Android Studio?Или это что-то еще?

1 Ответ

0 голосов
/ 21 мая 2018

Пакеты отличаются в зависимости от вашего класса - в частности, ваш класс PlanetShape находится в пакете, отличающемся от классов, которые он расширяет.

Непосредственно из Документация Java: (выделено мной)

Модификатор protected указывает, что к элементу можно получить доступ только в его собственном пакете (как с package-private) и,кроме того, подклассом своего класса в другом пакете.

Очевидно, что " подклассом своего класса в другом пакете ", кажется, является причиной некоторой путаницы иЯ согласен, что формулировка довольно двусмысленная.

По сути, то, что они пытаются сказать , вы можете сделать это:

public class PlanetShape extends Shape {
    aMethod() {
        // call the protected method declared in the Super class (ok)
        doProtectedMethodOfShape();
    }    
}

Но не this:

public class PlanetShape extends Shape {
    aMethod() {
        Shape s = new Shape();
        s.doProtectedMethodOfShape(); // error here
    }    
}

Во втором примере вы получаете сообщение об ошибке, потому что у вас нет доступа к защищенному методу через наследование , вы просто пытаетесьполучить доступ к защищенной функции-члену из экземпляра в другом пакете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...