protected访问权限又理解了一下

本文详细解析了Java中克隆方法的使用限制及其原因。通过示例代码展示了为什么子类不能直接调用父类Object中的受保护的clone()方法,并解释了访问控制规则如何影响方法的可见性。

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

看java的克隆时遇到问题 不能直接调用Object类的clone()方法,感觉很纳闷,提示方法不可见
有查看了一下protected访问权限
1同类 2同包 3 子类(不同包)
明明子类也是可以的。一般的类都是默认继承object的,所以应该可以调用clone()方法

第一、2条都好理解
第3条子类中:应该具体解释为子类可以调用自己从父类中继承的父类的protected方法。但是还是不能调用父类自己的
protected的方法,这里的父类是指父类实例。因为这样的话违反了第2条同包的原则。
举个至简例子:

public class A extends Object{
public static void main(String[] args) {
A a = new A();
try {
/*
* protected方法(clone())从object继承而来,
* 这里是子类A自己已经用有clone()方法,所以可以调用
*/
a.clone();
} catch (Exception e) {
e.printStackTrace();
}
Object o = new Object();
/*
* 这里的o是父类Object的实例,调用clone()会有编译错误,
* 虽然是在自己的子类中但是实例还是父类,他的调用权限最大还是在自己的包中,
* 即lang包
*/
o.clone();//The method clone() from the type Object is not visible
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值