protected 可以被当前类,以及它的子类和当前包所调用,但不能为外部包所调用

解决方案 »

  1.   

    protected可不可以被不在同一个包中的子类调用
      

  2.   

    protected可不可以被不在同一个包中的子类调用 => 可以
      

  3.   

    我试了,为什么下面这段程序编译有错误
    编译器说a.i无法访问
    //A.java
    package A;
    public class A
    {
    protected int i;}//B.java
    package B;
    import A.A;
    public class B extends A
    {
    int j;
        void T(A a)
        {
            a.i=10;
        }
    }
      

  4.   

    protected 就是我的东西只有和我一伙的或者我儿子能用
        void T(A a)
        {
            a.i=10;
        }这样不行,你试试这样:    void T(A a)
        {
            i=10;
        }
      

  5.   

    java Tutorial里有这样一句话不知该如何理解
    The next access level specifier is protected, which allows the class itself, subclasses,and all classes in the same package to access the members.
      

  6.   

    The next access level specifier is protected, which allows the class itself, subclasses,and all classes in the same package to access the members.
    这句话和“protected 就是我的东西只有和我一伙的或者我儿子能用“是一个道理!
    你的程序有很多问题:
    一:包名需要小写
    二:两个编译单元(A 和B)位于不同的package中,似乎不能继承,如果要继承就放在同一个package中
    三:如果要调用不同包里的变量或方法,改变两或方法必须为public
    //A.java
    package A;//包名要小写(规范编码)
    public class A//类名最好不要和包名一致
    {
    protected int i;//这里的访问权限因为public}//B.java
    package B;//up
    import A.A;
    public class B extends A//不在同一个包里不存在extends
    {
    int j//没有初始化
        void T(A a)
        {
            a.i=10;
        }
    }
    我写了一个写的例子帮你理解包和访问权限的含义
    //class A
    package zjfzju.a;
    public class A
    {
    int k=20;
    public A(int i){
    i=10;
    System.out.println(i);
    }
    }import zjfzju.a.*;
    ---------------------------------------
    //class B
    public class B {
    public static void main(String args[]){
    int j=0;
    int k=0;
    A aa=new A(j);
    System.out.println(aa.k);
    }
    }
      

  7.   

    //class A
    package zjfzju.a;
    public class A
    {
    void csdn(){
                 System.out.println("第十期的程序员不要买,我已经上当了");
    }
    }import zjfzju.a.*;
    ---------------------------------------
    //class B
    public class B extends A {
             public B(){}
    public static void main(String args[]){
                   B bb=new B();
                   bb.csdn();//如果class A 里的method csdn()是friendly or private就无法调用,如果用public那么所有的类都可以调用(单是这样有时候不安全,所以用protected,only desderived classes can transfer it
    }
    }
    睡觉了!祝你在java的道路上进步的快一些
      

  8.   

    如果是面向对象的观点,你站在A的立场上,既然protected的东西,显然他不愿意让别人用,虽然你是他的亲戚,随便动他的东西也不好吧。
    反正我是养成了良好的习惯,别人不让动的我坚决不动,除非别人告诉我
    public void 这个你可以用(){
     用;
    }
    人家都小气鬼一个,东西都protected了,何必自找没趣呢
      

  9.   

    我是他的亲戚当然可以用了,否则他就用private所在箱子里了。protected的东西是可以用的。
      

  10.   

    我试了
    位于不同包的类试可以继承的
    如:
    //B.java
    package b;import a.A;public class B extends A
    {
    protected int j;
    }//A.javapackage a;public class A
    {
    protected int i;
    }如果只能在同一个包中继承
    那么protected和package有什么区别呢
    他们都能由同一个包中的类访问
      

  11.   

    你的问题“那么protected和package有什么区别呢“不明白是什么意思?两个概念
      

  12.   

    protected 能被同一个包里的类和子类访问
    package 能被同一个包里的类访问
    如果子类与父类要在同一个包内
    那么 protected和package就没什么区别了
      

  13.   

    回复人: zjfzju(zjf) ( ) 信誉:100  2003-10-09 18:25:00  得分:0 
     
     
      我试了,为什么下面这段程序编译有错误
    编译器说a.i无法访问
    //A.java
    package A;
    public class A
    {
    protected int i;}//B.java
    package B;
    import A.A;
    public class B extends A
    {
    int j;
        void T(A a)
        {
            a.i=10;
        }
    }
      
     
    a初始化了吗?
      

  14.   

    //B.java
    package B;
    import A.A;
    public class B extends A
    {
        int j;
        void T()
        {
            //创建类A的实例
            A a = new A();
            a.i=10;
        }
    }
      

  15.   

    可以作参数//B.java
    package b;
    import A.A;
    public class B extends A
    {    int j;    void t(A a)
        {
            a.i=10;
        }
        
        public static void main(String[] args){
            B b = new B();
            A a = new A();
            b.t(a);
        }
        
    }
      

  16.   

    public class B extends A
    {
    int j;
        void T(A a)
        {
            a.i=10;
        }
    }
    如果B继承了A就能访问A中的protected变量或者方法,
    你在A中定义了i,如果你想用A中的i直接用就可以了
    不用像你那样a.i