最好将类中的字段标记为 private,而方法标记为 public。任何声明为 private 的内容对其他类都是不可见的。这对子类来说也完全适用,即子类也不能访问超类的私有字段。

Java 中的受保护部分对所有子类及同一个包中的所有其他类都可见。

有时候可能希望限制超类中的某个方法只允许子类访问,或者允许子类的方法访问超类的某个字段。需要将这些类方法或字段声明为受保护(protected)。例如,如果将超类 Employee 中的 hireDay 字段声明为 protected,而不是 private,Manager 类的方法就可以直接访问这个字段。

Employee 类

public class Employee {

// 聘用日期

protected LocalDate hireDay;

...

}

Employee 类的子类们:

public class Manager extends Employee {...}

public class Programmer extends Employee {...}

在 Java 中,对象的保护字段只能由同一个包中的类访问。现在考虑一个 Programmer 子类,这个子类在另一个不同的包中。Programmer 类中的方法只能查看 Programmer 对象自己的 hireDay 字段,而不能查看其它 Employee 对象的这个字段。有了这个限制,就能避免滥用保护机制,不能通过派生子类的对象来访问超类对象的受保护的字段。

在实际应用中,要谨慎使用受保护字段。假设你的类要提供给其他程序员使用,而你在设计这个类时设置了一些受保护字段。你不知道的是,其他程序员可能会由这个类再派生出新类,并开始访问你的受保护字段。在这种情况下,如果你想修改你的类的实现,就势必会影响那些程序员。这违背了 OOP 提倡数据封装的精神。

受保护的方法更具有实际意义。如果需要限制某个方法的使用,就可以将它声明为 protected。这表明子类(可能很熟悉祖先类)得到了信任,可以正确地使用这个方法,而其他类则不行。

这种方法的一个很好示例就是 Object 类中的 clone 方法。

public class Object {

@HotSpotIntrinsicCandidate

protected native Object clone() throws CloneNotSupportedException;

}

java 保护类型_Java 类的受保护访问(学习 Java 编程语言 046)相关推荐

  1. 受保护的Hyper-V环境和受保护的虚拟机

    无论是企业内部还是托管在IDC或云服务商的虚拟机,如何保障运行的环境是安全的,虚拟机是安全的(虚拟机文件里的数据以及看到的监视器画面)成为此篇文章和大家探讨研究的. 比如您正在运行的虚拟机,管理员是可 ...

  2. Java:计算机编程语言Java的简介、编程环境/工具、如何学习Java之详细攻略

    Java:计算机编程语言Java的简介.编程环境/工具.如何学习Java之详细攻略 目录 Java的简介 1.Java的工作原理--基于Eclipse等编程Java语言→定义Java类→Java虚拟机 ...

  3. java中保护类型_java – 当内部类访问受保护的外部类超级时,如何避免“IllegalAccessError”...

    我创建了以下类: public class BaseController { protected String field; protected void method() { System.out. ...

  4. java私有属性和私有方法_Java私有,受保护,公共和默认

    java私有属性和私有方法 您是Java程序员,所以您知道我在说什么. public修饰符使方法或字段可从应用程序中的任何位置访问. 那是简单的部分. 但是,您能告诉我protected和包私有的区别 ...

  5. java基本类型是类吗_Java基本数据类型和引用类型(一)

    Java基本数据类型和引用类型 Java中一共有四类八种基本数据类型,看下表: 除掉这四类八种基本类型,其它的都是对象,也就是引用类型,包括数组. 来看一段示例代码: 一个Person类,提供了一个构 ...

  6. java 匿名类型_Java之匿名类讲解

    匿名类,正如名字一样在java中没有名字标识的类,当然了编译后还是会安排一个名字的. 下面是一个关于匿名类的简单例子: public classClient {public static voidma ...

  7. java注释类型_Java 8类型注释

    java注释类型 Lambda表达式是迄今为止Java 8讨论最多和最受促进的功能.虽然我同意Lambda是一个很大的改进,但我认为其他一些Java 8功能由于Lambda的炒作而有所欠缺. 在这篇文 ...

  8. java 封装 英文_java类的封装、继承、多态

    一.封装(encapsulation) 封装性就是把类(对象)的属性和行为结合成一个独立的相同单位,并尽可能隐蔽类(对象)的内部细节,对外形成一个边界,只保留有限的对外接口使之与外部发生联系.封装的特 ...

  9. java 有界类型_Java™ 教程(有界类型参数)

    有界类型参数 有时你可能希望限制可用作参数化类型中的类型参数的类型,例如,对数字进行操作的方法可能只想接受Number或其子类的实例,这是有界类型参数的用途. 要声明有界类型参数,请列出类型参数的名称 ...

最新文章

  1. 绘制自己的人际关系图_Altium Designer10绘制原理图图库
  2. 策略模式原来这么简单!
  3. 零基础学python免费网课-零基础学Python量化投资,超值线上课程反复回看
  4. 如何使用Restic Backup Client将数据备份到对象存储服务
  5. 在centos7上使用Docker安装oracle 11g
  6. java jws-_为JWS应用程序启动指定JRE位置
  7. 走进JavaScript
  8. Xcode如何显示代码行数
  9. (转)常用英语100句
  10. 屏蔽KEmulator的内存查看功能
  11. mysql java驱动 ibm_各种数据库的jdbc驱动下载及连接方式
  12. 实时协同编辑的实现: 编辑锁, OT算法
  13. 小喵的VUE项目搭建(一)
  14. pdf根据目录生成书签
  15. 网吧服务器哪个好稳定,网吧服务器不应盲目追高新:够用稳定就好
  16. 运行 Webpack 项目图片和favicon.ico找不到, 图片404错误
  17. illegal unquoted character
  18. 用C++完成QRCode(快速响应码)的基本逻辑实现
  19. visio中直线交叉处消除跨线的方法
  20. skin卓沿护肤品怎么样_卓沿白金护肤品怎么样 卓沿白金护肤品是哪个国家的

热门文章

  1. question: student_link
  2. autofac 作用域_控制作用域和生命周期
  3. noip 2017棋盘
  4. 二分法(递归非递归)
  5. 1在mysql进行定义操作系统_Mysql基础知识一
  6. python安装email模块_Python使用SMTP模块、email模块发送邮件
  7. 手机版网页开发_华为低调发布鸿蒙OS手机开发者Beta版,明年覆盖1亿台设备
  8. mysql里添加不了中文_为什么MySQL不能添加中文
  9. anaconda打不开没反应_为什么账户总是有点击没对话?无非这2个原因
  10. matlab gpu deep learning_在Matlab中使用tensorflow (1)