protectedTest()是Parent类的方法,Parent的实例都有自己的protectedTest()方法,也都可以访问自己的方法,这有什么不对。你自己没搞清楚。

解决方案 »

  1.   

    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();
      

  2.   

    如果两个类被部署在同一个类包里面 protected的方法是可以被另外一个类当作public式方法来使用的,在java编程思想里面解释为friendly,
    如果在不同的包中,只有继承下来才可以使用
      

  3.   

    dooby(德鲁比) 说的对!protected只有同包内的可见。
    非本包内的类,只有是subclass才能见。
      

  4.   

    advanced(超越) 你说得有问题吧,你试试把other类放到和parent类不同的包里面看看
      

  5.   

    首先谢谢德鲁比.
    如果protected在同一包里可以被另外一个类当作public式方法来使用的,那和不写访问修饰符,即默认的访问修饰符有什么区别呢?
      

  6.   

    一个类里面的方法和变量如果不写访问修饰符也就是public protected之类,默认就是protected。
      

  7.   

    JAVA确实是一个很庞大的平台,自然就有很多不足之处,前两天我在重写JTree中的方法时,运行后弹出一个对话框,对话框中连JAVA中的好多源代码都整出来了
      

  8.   

    哦,没搞清楚你的问题,你是Protected呀,包内可访问
      

  9.   

    同意DOOBY的说法,事实确实如此
      

  10.   

    呵呵,protected只能是自己和之类能访问,没有听说国包内也能访问啊!
    如果情况如提问者的情况,那么就是java编译器的bug了。
      

  11.   

    我来总结一下:在Java中有4个级别:
    1. private 跟 C++ 一样。2. 包内可见 也就是声明的时候,不用任何modifier的方法或变量。同包的任何类都可以访问。C++中无包的概念,所以无法对应。3. protected 跟C++不太一样,限制比C++少些。支持在同一个包内其他类(不用继承)访问。4.public 跟C++一样。从上面的分类来看,Java没有一种可以和C++中的protected对应的modifier.
      

  12.   

    补充一点:
    上面由1到4是按照限制由多到少排列的。
    包内可见包括同包的任何类都可以通过实例访问之。包外的任何类都无法访问到它。protected限制要比包内可见小一些,在包外的类只要继承它,就可以访问这些变量。从某种角度上来看,C++的protected修饰符最严谨,只有子类可以访问。当然了,C++没有package的概念。