首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

【转】java中关于protected的一些误会

2012-09-20 
【转】java中关于protected的一些误解1. 我们知道,类成员的访问控制修饰符有public , protected , private,

【转】java中关于protected的一些误解

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

public : 能访问该类的任何地方可以访问public成员protected : 该类所属包内的类或该类的派生类可以访问protected成员无修饰符 : 该类所属包内的类可以访问无修饰符成员private : 该类本身能访问private成员

?

1.2. ?针对protected成员,有一个容易误解的地方,请看下面的代码//Base.java package test;public class Base {????? protected int i=0;}?

?

//TestProtected.javaimport 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 package test;public class Base {????? otected int i=0;}?

?

//TestProtected.javaimport 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 {}

热点排行