class Other { public void otherTest() { Parent pa = new Parent(); ========================== pa.protectedTest(); } public static void main(String[] args) { Other th = new Other(); th.otherTest(); System.out.println("Hello World!"); } }注释的一行说明pa是Parent的实例,pa.protectedTest();调用的是自己的protectedTest();
{
public void otherTest() {
Parent pa = new Parent();
==========================
pa.protectedTest();
}
public static void main(String[] args)
{
Other th = new Other();
th.otherTest();
System.out.println("Hello World!");
}
}注释的一行说明pa是Parent的实例,pa.protectedTest();调用的是自己的protectedTest();
如果在不同的包中,只有继承下来才可以使用
非本包内的类,只有是subclass才能见。
如果protected在同一包里可以被另外一个类当作public式方法来使用的,那和不写访问修饰符,即默认的访问修饰符有什么区别呢?
如果情况如提问者的情况,那么就是java编译器的bug了。
1. private 跟 C++ 一样。2. 包内可见 也就是声明的时候,不用任何modifier的方法或变量。同包的任何类都可以访问。C++中无包的概念,所以无法对应。3. protected 跟C++不太一样,限制比C++少些。支持在同一个包内其他类(不用继承)访问。4.public 跟C++一样。从上面的分类来看,Java没有一种可以和C++中的protected对应的modifier.
上面由1到4是按照限制由多到少排列的。
包内可见包括同包的任何类都可以通过实例访问之。包外的任何类都无法访问到它。protected限制要比包内可见小一些,在包外的类只要继承它,就可以访问这些变量。从某种角度上来看,C++的protected修饰符最严谨,只有子类可以访问。当然了,C++没有package的概念。