Java中特殊符号"."的深入理解及protected的访问权限分歧

Java中特殊符号"."的深入理解及protected的访问权限分歧

在深入理解前让我们看一段代码
在这里插入图片描述

Q : 为什么会报错?
A : 因为你在A的类中声明clone方法
Q : 真的是因为这个原因吗?
在这里插入图片描述
众所周知,所有的class类都是默认继承object类
虽然clone()在Object中被protected修饰
但根据protected的原理(同包同类子类中都能调用)
这里的clone()应该可以被调用才对

为什么会报错呢?
搞清楚这个问题前
让我们现在搞清楚什么是访问权限

访问权限 : 方法的提供者和方法调用者之间的关系
案例中

方法的提供者:java.long.Object
方法的调用者:com.Diao.test.java.test.A

可按照同包同类子类的依据
A是Object的子类,为什么不能调用Object的clone()方法呢?

这里我们再一次要先搞清楚"."的真正用法
让我们来看一段代码

User user = new User();
user.name = "魔都大迪奥"

这一段代码大家如果用语言表达?
我相信大部分人会这么说
创建一个User的对象
用对象调用 name 的属性 , 然后给name赋值 “魔都大迪奥”

但真的是这样说的吗?!

其实这一段代码应该这么说
创建一个User的对象
给对象的name属性 , 赋值叫 “魔都大迪奥”

这两句话看似没什么区别,其实区别很大
第一种说法是对象为主动
第二种说法是对象为从属关系

所以 “.” 不叫调用,而是叫从属关系

因此clone的实际调用者是TestProtected

所以案例中的方法调用者应该是这样的

 方法的提供者:java.long.Object
 方法的调用者:com.Diao.test.java.test.TestProtected

那第二个问题来了,TestProtected的类也是继承Object,为什么也报错呢?

我们可以举一个生活中的例子 :

正常情况下
张三的父亲 和 李四的父亲
不是同一个人
但是他们各自回到家中,都要叫自己的父亲为爸爸

这里原理也是一样的 (画图演示)
在这里插入图片描述
图中,我们就能清晰的看到
TestProtected类的Object类

A类的Object类
不是同一个
所以
他们之间的关系不满足protected的同包同类子类的条件
因此这也就是为什么

a.clone()

会报错的真正原因

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值