Класс Foo выглядит следующим образом:
package com.package1;
import com.package2.Nee;
/**
*
* @author Dilukshan Mahendra
*/
public class Foo extends Nee{
public static void main(String[] args) {
Nee mynee = new Nee();
/* mynee.sayProtected(); This gives me a compile error,
sayProtected() has protected
access in com.package2.Nee
*/
}
}
Класс Nee похож на ниже,
package com.package2;
/**
*
* @author Dilukshan Mahendra
*/
public class Nee {
protected void sayProtected(){
System.out.println("I'm a protected method in Nee!");
}
}
Как класс com.package1.Foo
и класс com.package2.Nee
находятся в двух разных пакетах, поэтому экземпляр класса Nee
не позволит вам вызывать защищенный метод этого класса.
Создайте экземпляр Foo
который является подклассом Nee
затем вызовите защищенный метод.
Foo foo = new Foo();
foo.sayProtected()
Если вам ясно, что защищенный член не может получить доступ к внешнему пакету без подкласса, то не имеет значения, где вы создаете объект класса Nee для доступа к его защищенному методу либо в его подклассе, либо в любом другом месте. Это то же самое. Только подкласс знает об защищенном члене и может быть доступен через объект подкласса.
Защищенный позволяет получить доступ к элементу подкласса. Здесь вы пытаетесь получить доступ к защищенному члену Nee
когда защита защищает только доступ защищенного члена к Foo
.
члены могут быть доступны подклассами или классами внутри одного пакета. Вы используете два разных пакета.