继承一个protected成员??是继承一个公共包再用到这个protected成员吧?按理由protected是可以被所以子类继承的啊,你有没有用到public protected的呢?如果是缺省的protected只能被包以及包中的子类来继承的。

解决方案 »

  1.   

    sun规定:protected 类型成员只能在同一包内继承使用!
      

  2.   

    这个包是公共的
    file1
    package lei;
    class A{
    protected int i;
    }file2
    import lei.A;
    class B extends A{
    }
    class C extends B{
    public static void main(String[] args){
    B b=new B();
    System.out.println(b.i);
    }
    }
    编译发生错误
      

  3.   

    写错了

    file1
    package lei;
    public class A{
    protected int i;
    }file2
    import lei.A;
    class B extends A{
    }
    class C extends B{
    public static void main(String[] args){
    B b=new B();
    System.out.println(b.i);
    }
    }
      

  4.   

    sun规定的?啥时候的事?:)
      

  5.   

    不会吧,如果protected只能在同一包内使用的话,那他和默认的访问关键字有什么区别呢?
      

  6.   

    当然可以访问了//MySuper.java
    package zhoutest;
    public class MySuper{
    protected int i=0;
    }//A.java
    import zhoutest.MySuper;
    public class A extends MySuper{
    }//B.java
    public class B extends A{
    public B(){
    System.out.println("i="+i);
    }

    public static void main(String args[] ){
    B b=new B();
    }
    }***result***
    i=0
      

  7.   

    不过保护变量和保护方法以及保护类是不能从不同的包中继承下来的。这当然是Sun的规定啊。当然默认的类是受保护的。
      

  8.   

    你在类A中new 一个对象如a,那么你就可以用a.i来访问这个成员啦
      

  9.   

    to yslfwww(阿澈) 
    你的例子是可以运行,但改一下的话
    //MySuper.java
    package zhoutest;
    public class MySuper{
    protected int i=0;
    }//A.java
    import zhoutest.MySuper;
    public class A extends MySuper{
    }//B.java
    public class B extends A{

    public static void main(String args[] ){
    A b=new A();
                      System.out.println(b.i);
    }
    }就不行了,如何解释?
    报错为
    i has protected access in zhouTest
      

  10.   

    b.i当然不行了.i对于A,B来说都是protect的成员变量.这一点确实没有问题.但是protected的含义是:
    1.对于子类而言,相当于public,也就是说父类的protected成员子类可以访问.
    2.但对外是相当于private的.也就是说你不能写
    A a = new A();
    B b = new B();
    int x = a.i;//不能访问
    int y = b.i//也不能访问.
    我想引入protected的原因也就是,本来i不想暴露出来,应该定义为private(在A中),但是,这样以来,子类(如B),要想访问i,也就需要通过get()set()之类的方法了.很不方便.于是一个界乎于private和public之间的protected就有用了.
    对外边来说,他和private一样,是不可以访问的.但在子类里边,就像public一样,可以直接访问.