1. 访问修饰符

访问修饰符的权限范围不用多讲,通过如下一张表即可表示,但是使用起来却有很多疑问。public修饰符就不用多讲了,在哪都可以访问;无修饰符的也不用多加分析,就是同包下可以访问。接下来我们分析一下protected和private修饰符。

  本类 同一个包 子类 其它包
public
protected  
无修饰符(也称为package-private)    
private      

1.1 protected修饰符

首先,新建两个包 AA_Access 和 AA_Test,然后在包 AA_Access 编写两个类 TestA 和 TestC,在包 AA_Test 编写类 TestB,包目录结构及类代码如下。

不是说protected权限的成员可以被子类访问吗?为什么TestB类继承了TestA类,访问TestA的protected权限方法会报错呢?

其实,是你理解错了。我们再通过一张图来说明以下,如下图。

我们直接访问testProtected方法是正常的,所以你对protected权限有了新的认识吗?protected修饰的成员可以被子类(这里指不同包的子类,同包的子类都不需要考虑protected)访问指父类的protected成员被子类继承,子类可以直接使用;不是在子类方法中创建父类对象,然后通过父类对象调用protected权限的方法。

1.2 private修饰符

不是说private权限的成员可以被本类访问吗?那为什么下图中TestA类对象不能访问private修饰的testPrivate方法呢?

所以private权限的本类访问是指只可以在本类中访问私有权限的成员,即使在外部创建对象,仍然不可以通过对象访问私有权限的成员。

2. 调用clone()方法时报错

我们在实现深克隆时,需要调用对象的clone()方法,因为所有的类默认继承Object类,然后clone()方法是Object中protected修饰的方法,意味着可以被子类继承,所以子类中拥有该方法,也可以直接调用,如下图。

 但是我们在同个包的类方法中创建该类对象,然后通过对象调用clone方法却报错了,如下图。

所以我们可以得出结论:protected权限成员可以被非同包的子类访问,指子类内部可以直接使用父类protected成员;而不是在外部创建子类对象,通过子类对象访问父类protected成员。

当我重写了clone()方法时,程序正常,如下图。

附录

针对前面所说,有点绕,我们再回顾一下。主要有两点:① protected修饰的方法(变量也类似),同包子类不需考虑,不同包子类不可以通过创建父类对象,然后对象.方法来调用。② private修饰的私有方法不可以在外部通过对象.方法调用,只能在本类中被访问。③ 从父类继承的protected方法,如果子类没有重写,那么对象.方法是否可以调用要判断当前类和父类是否同包;如果子类重写,那么对象.方法是否可以调用直接判断当前类和子类是否同包。

接下来是我自己设计的代码段,验证上述结论的同时,可以帮你加深一下理解,看一下你是否理解有些代码可以运行成功,有些代码却报错。不能理解可以在评论区回复。

附录1.

文件目录说明,AA_Access包下有TestA和TestC两个类,AA_Test包下有TestB和TestD两个类,TestC和TestD继承TestA,如下图。

附录1.1 此时父类TestA的子类TestB和TestD没有重写父类的protected方法,类代码如下图所示,请分析。

附录1.2 TestA的子类TestC和TestD重写protected方法的类代码如下,请分析。

附录2.

此时更改文件目录,TestA和TestB和TestD放在包AA_Test下,TestC放在AA_Access包下,但类继承关系没有改变,如下图。

附录2.1 子类TestB和TestD没有重写父类TestA的protected方法,代码如下,请分析。

附录2.2 子类TestC和TestD重写父类protected方法,代码如下,请分析。

 

修饰符private和protected详解以及调用Object类Clone方法报错:clone() has protected access in java.lang.Object的原因及解决方案相关推荐

  1. JavaSE——面向对象进阶(封装、this、static、代码块、包、权限修饰符、main方法详解)

    第2节 面向对象进阶 一.封装与private 概述: 封装的意义在于保护或者防止代码(数据)被我们无意中破坏.保护成员属性,不让类以外的程序直接访问和修改. 封装原则: 隐藏对象的属性和实现细节,仅 ...

  2. java中private,public,protected详解

    参照甲骨文的java文档:点击打开链接 访问级别 访问级别修饰符确定其他类是否可以使用特定字段或调用特定方法.有两个级别的访问控制: 1.在顶级 - public或package-private(没有 ...

  3. Java访问权限之 protected详解

    摘要:     对于类的成员(包括成员变量和成员方法)而言,其能否被其他类所访问,取决于该成员的修饰词:而对于一个类而言,其能否被其他类所访问,也取决于该类的修饰词.在Java中,类成员访问权限修饰词 ...

  4. python3占位符详解_占位符最新:Python 占位符的使用方法详解_爱安网 LoveAn.com

    关于"占位符"的最新内容 聚合阅读 这篇文章主要介绍了Python 占位符的使用方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以 ...

  5. 2020年 第11届 蓝桥杯 C/C++ B组 省赛真题详解及小结【第1场省赛2020.7.5】【Java版】

    蓝桥杯 Java B组 省赛真题详解及小结汇总[2013年(第4届)~2020年(第11届)] 注意:部分代码及程序 源自 蓝桥杯 官网视频(历年真题解析) 郑未老师. 2013年 第04届 蓝桥杯 ...

  6. python调用cmd命令释放端口_详解python调用cmd命令三种方法

    目前我使用到的python中执行cmd的方式有三种 使用os.system("cmd") 该方法在调用完shell脚本后,返回一个16位的二进制数,低位为杀死所调用脚本的信号号码, ...

  7. 详解Unity中Time类的用法与深入探究

    前言 在游戏世界中,时间无疑是最为重要的参数,它是游戏世界能否正常运转的关键.一旦它出错,轻则卡顿,重则游戏世界崩坏.在使用Unity引擎创造的世界中,Time类无疑是必须要掌握的一个类,它是控制时间 ...

  8. 【视频】详解Scala中的类及与Java的详细区别

    详解Scala中的类及与Java的详细区别

  9. 详解C调用lua脚本效率测试

    详解C调用lua脚本效率测试 C调用lua脚本效率测试是本文要介绍的内容,以下代码以C语言为基准,测试了C调用Lua循环和循环调用Lua的效率.结论是不要频繁地穿越C/Lua边界. #include  ...

最新文章

  1. DLL延迟加载工程分析
  2. 迈向未来的那五种人,自古以来就很重要的人
  3. linux存储--inode详解(五)
  4. 数学之美系列十七 -- 谈谈搜索引擎作弊问题(Search Engine Anti-SPAM)
  5. Java与iOS对话:Java对象与Apple plist序列化
  6. java里dir是什么意思_关于文件系统:为什么user.dir系统属性在Java中工作?
  7. 矩池云安装gdal五种解决方案
  8. json and .net
  9. java. tcp. 权限,java - tcpdump的不能够写PCAP文件。没有权限 - SO中文参考 - www.soinside.com...
  10. SoundPool基本用法
  11. lol排位服务器维护赢了没加分,LOL最新排位制裁,“挂机退游戏会被限制加分,力度将逐次叠加”...
  12. 系统总线【计算机组成原理】
  13. 车载GNSS/INS/LiDAR坐标系定义与理解
  14. Pie Chart(nvd3)
  15. DN2540的 spice 模型
  16. csharp高级练习题:ASCII85编解码【难度:3级】--景越C#经典编程题库,不同难度C#练习题,适合自学C#的新手进阶训练
  17. 复旦-华盛顿大学EMBA:抖音发12亿元春晚红包!盘点张一鸣的管理之道
  18. 六顶帽子思考法的好处
  19. Gemini Blueprint参考文档 第9章 服务注册表
  20. [经典文章翻译]A Crash Course on the Depths of Win32 Structured Exception Handling

热门文章

  1. 【MM配置】Pricing 采购定价 2
  2. S4的ESH Bug导致Search help巨慢
  3. 【转】SAP采购订单屏幕增强
  4. 哈士奇与阿拉斯加的区别!
  5. 销售订单行项目的装运点字段确认规则
  6. 2021热度不减的在线教育,正在努力成为线下教育的有益补充
  7. 网页从web服务器受到的威胁,[多选] Web从web服务器方面和浏览器方面受到的威胁主要来自()。...
  8. 与虫子尾交3d动画网站_不容错过的三维动画设计展!快来pick吧!
  9. 学电脑从新手到高手_小白如何学手绘插画?新手到高手必学的四套教程【614期】...
  10. mysql脚本简书,mysql一键安装脚本