编译上述几个文件,后2个不能通过。编译器提示:
" nFeathers has protected access in birdpack.Bird"。
第4点说明,就算在子类中,也只能通过子类(或子类的子类)的引用来访问父类中的protected方法和成员变量。
在Duck3和Swan两个子类中,直接通过父类和另一个子类来访问父类中的protected方法和成员变量就不行。
附:编译技巧
当编译含有包声明的源文件时,使用 -d 选项会带来很多方便,它能保证编译后的class文件存放在正确的目录路径下。
我们可以把上述5个文件都放在protectedtest目录下,然后用 -d 选项去编译:
javac -d . Bird.java
javac -d . Duck1.java
.....
其中.表示以当前目录创建包结构的目录层次。编译成功后,会在protectedtest下生成2个目录:birdpack和duckpack,里面是生成的class文件。