Java的访问修饰符

简介: 为了实现面向对象程序设计(OOP)的封装这个特性,需要程序设计语言提供一定的语法机制来支持。这个语法机制就是访问权限控制(访问修饰符:public、protected、private、default)。

为了实现面向对象程序设计(OOP)的封装这个特性,需要程序设计语言提供一定的语法机制来支持。这个语法机制就是访问权限控制(访问修饰符:public、protected、private、default)。

在 Java 中,封装就意味着所有的实例域都带有 private 访问修饰符(私有的实例域),并提供带有 public 访问修饰符的域访问器方法和域更改器方法(公共的操作方法)。

访问修饰符

下面归纳一下 Java 用于控制可见性的 4 个访问修饰符:

  • public:声明为 public 的内容对所有类可见。
  • protected:声明为 protected 的内容对所有子类和同一个包中的所有其他类可见。
  • private:声明为 private 的内容仅对本类可见。对其他类都是不可见的,这对于子类来说也完全适用,即子类也不能访问父类的私有域。
  • 缺省(无访问修饰符):无访问修饰符的内容对同一个包中的所有其他类可见。

Java 中的受保护部分(protected)对所有子类及同一个包中的所有其他类都可见。这与 C++ 中的保护机制稍有不同,Java 中的 protected 概念要比 C++ 中的安全性差。


访问修饰符用来修饰类,及类的内部结构

  • 修饰类,只能用:public、缺省
  • 修饰类的内部结构(属性、方法、构造器、内部类),可以用:public、protected、private、缺省 修饰

受访问保护

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

然而,在有些时候,人们希望父类中的某些方法允许被子类访问,或者允许子类的方法访问父类的某个域。为此,需要将这些方法或域声明为 protected。例如,如果将父类 Employee 中的 hireDay 声明为 proteced,而不是私有的,Manager 中的方法就可以直接地访问它。

不过,Manager 类中的方法只能够访问 Manager 对象中的 hireDay 域,而不能访问其他 Employee 对象中的这个域。这种限制有助于避免滥用受保护机制,使得子类只能获得访问受保护域的权利。

在实际应用中,要谨慎使用 protected 属性。假设需要将设计的类提供给其他程序员使用,而在这个类中设置了一些受保护域,由于其他程序员可以由这个类再派生出新类,并访问其中的受保护域。在这种情况下,如果需要对这个类的实现进行修改,就必须通知所有使用这个类的程序员。这违背了 OOP 提倡的数据封装原则。

受保护的方法更具有实际意义。

  • 如果需要限制某个方法的使用,就可以将该方法声明为 protected。这表明子类(可能很熟悉祖先类)得到信任,可以正确地使用这个方法,而其他类则不行。这种方法的一个最好的示例就是 Object 类中的 clone 方法。
  • protected 方法对于指示那些不提供一般用途而应在子类中重新定义的方法很有用。

参考资料

《Java核心技术卷一:基础知识》(第10版)第 5 章:继承 5.1.10 受保护访问

相关文章
|
5天前
|
SQL Java 数据库连接
在Java应用中,数据库访问常成为性能瓶颈。连接池技术通过预建立并复用数据库连接,有效减少连接开销,提升访问效率
在Java应用中,数据库访问常成为性能瓶颈。连接池技术通过预建立并复用数据库连接,有效减少连接开销,提升访问效率。本文介绍了连接池的工作原理、优势及实现方法,并提供了HikariCP的示例代码。
16 3
|
7天前
|
SQL Java 数据库连接
打破瓶颈:利用Java连接池技术提升数据库访问效率
在Java应用中,数据库访问常成为性能瓶颈。连接池技术通过预建立并复用数据库连接,避免了频繁的连接建立和断开,显著提升了数据库访问效率。常见的连接池库包括HikariCP、C3P0和DBCP,它们提供了丰富的配置选项和强大的功能,帮助优化应用性能。
24 2
|
17天前
|
Java
Java访问外网图片地址时,如何添加代理?
【10月更文挑战第14天】Java访问外网图片地址时,如何添加代理?
19 2
|
29天前
|
小程序 Java
小程序访问java后台失败解决方案
小程序访问java后台失败解决方案
42 2
|
29天前
|
小程序 JavaScript Java
小程序访问java后台
小程序访问java后台
26 1
|
1月前
|
存储 Java
深入理解java对象的访问定位
这篇文章深入探讨了Java对象的访问定位机制,比较了使用句柄和直接指针两种主流的对象访问方式,并指出了它们各自的优势,例如句柄访问在对象移动时的稳定性和直接指针访问的速度优势。
32 0
深入理解java对象的访问定位
|
2月前
|
存储 Java 关系型数据库
java: 无法访问org.springframework.context.ConfigurableApplicationContext
`亲测可用,之前搜索了很多博客,啥样的都有,就是不介绍报错以及配置用处,根本不懂照抄那些配置是干啥的,稀里糊涂的按照博客搭完也跑不起来,因此记录这个。` `项目背景`:公司项目当前采用http协议+shiro+mysql的登录认证方式,而现在想支持ldap协议认证登录然后能够访问自己公司的项目网站。 `举例说明`:假设我们公司有自己的门户网站,现在我们收购了一家公司,他们数据库采用ldap存储用户数据,那么为了他们账户能登陆我们公司项目所以需要集成,而不是再把他们的账户重新在mysql再创建一遍,万一人家有1W个账户呢,不累死了且也不现实啊。
44 11
|
2月前
|
安全 Java 编译器
java访问字段
java访问字段
25 6
|
2月前
|
安全 Java 编译器
java访问类字段
java访问类字段
|
2月前
|
安全 Java 开发者
Java修饰符与封装:理解访问权限、行为控制与数据隐藏的重要性
Java中的修饰符和封装概念是构建健壯、易维护和扩展的Java应用程序的基石。通过合理利用访问权限修饰符和非访问修饰符,开发者能够设计出更加安全、灵活且高效的代码结构。封装不仅是面向对象编程的核心原则之一,也是提高软件项目质量和可维护性的关键策略。
16 1