日期:2014-05-20  浏览次数:20813 次

关于protected的一点困惑
Protected   :   在包内相当于friendly,   但可被任意地方的子类调用

package   unit06.exercises.package1;

public   class   ForTest15   {

        protected   void   tttt(){
               
        }
}

import   unit06.exercises.package1.*;

public   class   Test15   extends   ForTest15{
       
        void   ttttttt(){
                ForTest15   ft15   =   new   ForTest15();
//                 ft15.tttt();

        }

        public   static   void   main(String[]   args)   {
        }
}

被注释掉的一行发生编译错误,既然protected在子类中可以被访问,那为什么会出现错误呢?

其实实际中大家都不会这么做,但是我就是想搞清楚protected的机制,希望好心人能清楚的帮我解释一下,谢谢

------解决方案--------------------
好像发了两遍
void ttttttt(){
tttt();
}
是可以的

但是
void ttttttt(){
ForTest15 ft15 = new ForTest15();
ft15.tttt();
}
是不可以的
------解决方案--------------------
ft15.tttt()这样只能调用ft15对象的public的方法,不能调用protected的方法,因为ft15对象可以在任何类里面构造。

------解决方案--------------------
学习
------解决方案--------------------
第二个加上package unit06.exercises.package1;
就对了 ,protected的不可包外继承
------解决方案--------------------
楼上正解
------解决方案--------------------
楼上正解,建议个加分,看到你的签名,呵呵
protected也赋予package权限,也就是说package里的其它类也可以访问protected元素
(摘自thinking in java chap5)