Может ли видимость по умолчанию в классе Java иметь защищенный член?

В Java, с моей точки зрения, для видимого по умолчанию класса не имеет смысла иметь член protected. С моей точки зрения, это не имеет смысла, потому что видимость по умолчанию в Java = защищенная видимость на уровне пакета в Java = уровень пакета + подкласс (независимо от пакета)

class TestClass{

 protected int addIntegers(int a, int b){

       return (a+b);
 } // end of protected addIntegers(int a, int b){

}

Правильно ли я говорю, что приведенный выше код - чепуха?


person CS Lewis    schedule 04.11.2014    source источник


Ответы (1)


Вы вполне можете иметь общедоступный класс Foo в том же пакете, расширяющий ваш базовый класс, и другой класс Bar в другом пакете, расширяющий Foo и переопределяющий защищенный метод.

package a;

class Base {
    protected void bang() {
    }
}

package a;

public class Foo extends Base {
}

package b;

public class Bar extends Foo {
    @Override
    protected void bang() {
    }
}
person JB Nizet    schedule 04.11.2014
comment
Хороший улов!!! так что это способ увидеть защищенный метод, принадлежащий видимому классу по умолчанию в классе вне пакета, связанного с видимым классом по умолчанию. Хороший улов!!!! - person CS Lewis; 04.11.2014