1.  我们知道,类成员的访问控制修饰符有public , protected , private,它们形成了四种控制级别:


public : 能访问该类的任何地方可以访问public成员


protected : 该类所属包内的类或该类的派生类可以访问protected成员


无修饰符 : 该类所属包内的类可以访问无修饰符成员


private 该类本身能访问private成员


2.  针对protected成员,有一个容易误解的地方,请看下面的代码


base.java (test/base.java)


package test;


 


public class base {


protected int i=0;


}


 


TestProtected.java


import test.base;


 


public class TestProtected extends base {


public static void main(String [] args) {


TestProtected tp = new TestProtected();


       


System.out.println(tp.i); //Correct , 派生类中继承了基类的protected成员,派生类中能访问派生类对象所继承的protected成员


       


       


        base bbb = new base();


System.out.println(bbb.i); //Error , 不能访问基类对象的protected成员


       


       


}


}


3.  通过以上代码,可以得出结论:在生成派生类时,派生类可以继承基类的protected成员,这个继承的protected成员在派生类内部是可以访问的,但是在派生类内部无法直接访问基类对象的protected成员。


4.  更进一步,一种派生类内部只能访问该种派生类的对象继承的基类protected成员,不能访问基类的其他派生类对象继承的基类protected成员。请看代码:


base.java (test/base.java)


package test;


 


public class base {


protected int i=0;


}


 


TestProtected.java


import test.base;


 


public class TestProtected  extends base {


public static void main(String [] args) {


TestProtected tp1 = new TestProtected();


        derive tp2 = new derive();


       


System.out.println(tp1.i); // correct


System.out.println(tp2.i); //Compile error


       


}


}


 


class derive extends base {

}


1条评论

  1. thx.

发表评论

评论也有版权!