对Pretected关键字的一个错误理解总结
我对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
但是实际操作之后出现了这样的错误提示:
这是为什么呢?明明MySubClass类继承了MySuperClass类,为什么不能调用该成员变量Value呢?我百思不得其解。问度娘Protected的访问权限还是没有弄懂。无奈只好问峰哥(我们的龙头老大,峰老师)了。
我知道了自己错误的原因了,那就是我在另一个类TestMain中,用子类对象去调用父类成员。但是被Pretected修饰的成员,它的访问权限是类与类之间的限制。也就是说不能在TestMain中用子类对象调用父类的成员。除非TestMain是父类MySuperClass的子类。所以如果想调用被Protected修饰的父类成员,必须在继承了该父类的子类中去实现该操作,而不是在与父类(MysuperClass)没有关系的测试类(TestMain)中实现该调用。
如图所示:
上一篇: mysql主从同步原理及配置
下一篇: Tensorflow简单的线性回归模型