Для защищенного модификатора доступа связанный с ним способ или атрибут должен быть видимым для его подкласса. Это согласно определению.модификатор доступа для защищенного метода
Но есть одна вещь, которую я не могу объяснить здесь. Например, мы имеем следующий код: класс Base:
package com.set.test;
public class ModifierBase {
private int privateInt;
int friendlyInt;
protected int protectedInt;
public int publicInt;
private void displayPrivate(){
System.out.println("displayPrivate");
}
void displayFriendly(){
System.out.println("displayFriendly");
}
protected void displaoyProtected(){
System.out.println("displaoyProtected");
}
public void displayPublic(){
System.out.println("displayPublic");
}
}
И класс расширяет этот в другом пакете.
package com.another;
import com.set.test.ModifierBase;
public class ModifierSubPackgeExtend extends ModifierBase{
public static void main(String[] args) {
ModifierSubPackgeExtend m = new ModifierSubPackgeExtend();
ModifierBase mb = new ModifierSubPackgeExtend();
}
}
m может получить доступ как к охраняемым, так и к общественным, это круто. Однако mb не может получить доступ к защищенному методу или переменной.
mb.protectedInt //is not accessable
m.protectedInt //is accessible
Почему это так?
Но для дружной, имеющих тот же пример:
package com.set.test;
public class ModifierExtend extends ModifierBase {
public static void main(String[] args) {
ModifierExtend m = new ModifierExtend();
ModifierBase mb = new ModifierExtend();
}
}
Оба м и м.б. могут получить доступ к дружелюбному модификатор.
m.friendlyInt
mb.friendlyInt
Они оба прекрасные.
Почему при объявлении с базовым классом и инициализации подкласс имеет различный доступ к защищенным vs объявлять и инициализировать оба подкласса?
Что именно вы пытаетесь достичь? Кроме того, у java нет «дружественного» модификатора. Это разрешение на уровне пакета. –
У меня нет дружественного литерала в качестве ключевого слова. Я просто спрашиваю, почему объявить, что базовый класс имеет другой уровень доступа, сравнивается с объявлением в качестве подкласса. Почему поведение отличается от обычного доступа. –
Нет дружественного доступа, только доступ на уровне пакета. И они находятся в разных пакетах. –