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

博客围绕一段Java代码展开,探讨其能否编译及原因。作者起初认为代码能正常输出,实际操作却报错。经询问得知,错误原因是在与父类无关的测试类中用子类对象调用被Protected修饰的父类成员,正确做法应在子类中实现调用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

														我对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)中实现该调用。

如图所示:
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值