Защищенные средства:
a) Этот член будет доступен для всех классов в одном пакете с помощью ссылки объекта.
b) Для другого пакета это будет доступно только внутри Подклассы A говорят B и используемая ссылка могут быть экземплярами B или любого подкласса B.
Возьмем пример:
Пусть A - родительский класс в некотором пакете, скажем com.ex1
Пусть B, C - классы в разных пакетах по A say com.ex2
. Кроме того, B extends A
и C extends B
. Мы увидим, как мы можем использовать защищенное поле A внутри B (подкласс A)
Код A:
public class A {
protected int a = 10;
}
Код B:
public class B extends A {
public void printUsingInheritance() {
// Using this
System.out.println(this.a);
}
public void printUsingInstantiation() {
// Using instance of B
B b = new B();
System.out.println(b.a);
// Using instance of C as C is subclass of B
C c = new C();
System.out.println(c.a);
A a = new A();
System.out.println(a.a); // Compilation error as A is not subclass of B
}
}
Код C:
public class C extends B {
}
Для защищенных статических:
Те же правила применяются, за исключением того, что в b) теперь он доступен в любом подклассе класса A по ссылке класса A. [Д0] Ссылка