关于protected修饰词的思考

先贴出protected的访问区间:同一包内或者在其子类中访问。

虽然很简单的话但是对于一个初学者来说似乎会存在一些误解(没有细细考究之前我也是如此),而这个误解在哪里呢,先看几行简单的再不能简单的代码:

package tesst;
public class test1 {
 protected int i=0;
 protected void print(){
	 System.out.println("haha");
 }
}
package tesst;
public class test2 extends test1{
public static void main(String[] args){
	test2 t=new test2();
	t.print();
}
}
package tesst;
public class test3 {
public void print_1(){
	test2 t=new test2();
	t.print();
}
}

上边三个类都是处在同一个包里边,上边程序是不存在任何问题的,在类test2中体现的是子类中访问父类test1中的受保护方法,合情合理,不存在问题。test3中体现的是同一包下访问test1中的受保护方法(注:这里并不能体现在子类中访问父类的受保护方法,因为test3不是test1的子类),合情合理,不存在问题。

however,当我把test3改写成如下代码时,会出现语法错误:

package t;//这里发生了改动
import tesst.test2;
public class test3 {
public void print_1(){
	test2 t=new test2();
	t.print();
}
}

原因在于以上代码既不能体现包内访问也不能体现子类中访问。而我上边提到的误解在于,有人可能会这样思考(之前我也是这么想的):test2是test1的子类,test2的实例调用print()方法不是合情合理吗?注意这里需要细究的是,在其子类中访问。





猜你喜欢

转载自blog.csdn.net/qq_40400960/article/details/80304994