欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

对Pretected关键字的一个错误理解总结

程序员文章站 2024-03-21 08:02:45
...
														我对Pretected关键字错误理解的总结
		
	作为一个Java的初学者,在课堂上听老师讲解知识很多知识点都听懂了。但是在做作业的时候就会发现了一些自己的一些错误。这个错误是我学计算机语言以来,”根深蒂固”的错误。这个错误就是我对Protected这个关键字的理解。
	  开始我一直觉得被Protected修饰的关键字只要父类被子类继承,那么该子类就可以使用父类中被Protected修饰的的成员(public不考虑)。不管父类与子类是否在一个包中,只要有这层继承关系,子类对象就可以调用父类成员。直到做这个作业我才知道自己的错误在哪里。

题目:
//MySuperClass.java
package corejava.chp6;
class MySuperClass{
protected int value;
}
//TestMain.java
import corejava.chp6.*;
class MySubClass extends MySuperClass{
public void print(){
System.out.println(value);
}
}
public class TestMain{
public static void main(String args[]){
MySubClass msc = new MySubClass();
msc.print();
System.out.println(msc.value);
}
}
这段代码能否编译通过?如果可以,输出结果是什么?如果不能,原因是什么?

我开始觉得输出结果应该是:
0
0
但是实际操作之后出现了这样的错误提示:
对Pretected关键字的一个错误理解总结
这是为什么呢?明明MySubClass类继承了MySuperClass类,为什么不能调用该成员变量Value呢?我百思不得其解。问度娘Protected的访问权限还是没有弄懂。无奈只好问峰哥(我们的龙头老大,峰老师)了。
我知道了自己错误的原因了,那就是我在另一个类TestMain中,用子类对象去调用父类成员。但是被Pretected修饰的成员,它的访问权限是类与类之间的限制。也就是说不能在TestMain中用子类对象调用父类的成员。除非TestMain是父类MySuperClass的子类。所以如果想调用被Protected修饰的父类成员,必须在继承了该父类的子类中去实现该操作,而不是在与父类(MysuperClass)没有关系的测试类(TestMain)中实现该调用。

如图所示:
对Pretected关键字的一个错误理解总结