The key here is the package to which the classes belong.
This is explained in JLS clause 6.6.2 :
6.6.2
, , .
:
:
FILE pkg1/A.java ( Object )
package pkg1;
public class A {
protected void method() {};
}
FILE pkg2/B.java ( storeDate )
package pkg2;
import pkg1.A;
public class B extends A {
public static void main(String args[]) {
new A().method();
}
}
javac :
pkg2/B.java:5: method() has protected access in pkg1.A
new A().method();
^
( , : clone() java.lang.Object kkk.clone();)
B pkg1 .
, :
FILE pkg1/A.java ( )
package pkg1;
public class A {
protected void method() {};
}
FILE pkg1/B.java ( pkg2 pkg1)
package pkg1;
public class B extends A {
public static void main(String args[]) {
new A().method();
}
}
, , - new Object().clone()? , java.lang (, , SecurityException: Prohibited package name: java.lang).