示例解析java面向对象编程封装与访问控制
作者:移动安全星球 发布时间:2021-10-18 19:55:19
标签:java,封装,访问控制,面向对象
封装(Encapsulation)
是面向对象编程的一个核心概念,它意味着将数据(属性)和方法(操作数据的函数)捆绑在一起,形成一个类(Class)。封装的目的是将数据和操作数据的方法隐藏起来,以防止外部对数据的直接访问。这样,我们就可以通过定义公共接口(Public Interface)来控制外部对类的访问,提高代码的可维护性和安全性。
Java 提供了四种访问修饰符(Access Modifier)来实现封装,它们分别是:public
、private
、protected
和不写(默认)。访问修饰符可以修饰类的属性和方法,不同的访问修饰符有不同的访问权限。
public:最高权限,表示该属性或方法可以被任何其他类访问。
private:最低权限,表示该属性或方法只能被其所在的类访问。
protected:较低权限,表示该属性或方法可以被其所在类及其子类和同一包中的其他类访问。
默认:表示该属性或方法可以被其所在类和同一包中的其他类访问,但不能被子类访问。
通过案例了解这四种访问修饰符
// 位于包 com.example 的 Person 类
package com.example;
public class Person {
public String name; // 公共属性,任何类都可以访问
private int age; // 私有属性,只能在 Person 类中访问
protected String address; // 受保护属性,可以在 Person 类,同一包中的类和子类中访问
String phoneNumber; // 默认属性,可以在 Person 类和同一包中的类访问,但不能被子类访问
public void sayHello() { // 公共方法,任何类都可以访问
System.out.println("Hello! I am " + name);
}
private void growUp() { // 私有方法,只能在 Person 类中访问
age++;
}
protected void changeAddress(String newAddress) { // 受保护方法,可以在 Person 类,同一包中的类和子类中访问
address = newAddress;
}
void updatePhoneNumber(String newNumber) { // 默认方法,可以在 Person 类和同一包中的类访问,但不能被子类访问
phoneNumber = newNumber;
}
}
// 位于包 com.example 的 Employee 类
package com.example;
public class Employee extends Person {
public void work() {
sayHello(); // 可以访问父类的公共方法 sayHello
changeAddress("New York"); // 可以访问父类的受保护方法 changeAddress
}
}
// 位于包 com.other 的 Another 类
package com.other;
import com.example.Person;
public class Another {
public void test() {
Person person = new Person();
person.sayHello(); // 可以访问 Person 类的公共方法 sayHello
}
}
这个例子中,Person
类有四个属性和四个方法,分别使用了四种不同的访问修饰符。Employee
类继承了 Person
类,可以访问其公共方法和受保护方法。Another
类虽然不在同一包中,但是可以访问 Person
类的公共方法。
当我们设计类时,应该尽量将属性设置为 private
,并通过公共方法(如 getter 和 setter)来访问这些属性。这样做可以确保类的实现细节不会泄露给外部,提高代码的可维护性和安全性。
来源:https://segmentfault.com/a/1190000043842297


猜你喜欢
- maven 文件打包,输入 :package -Dmaven.test.skip=true 进行打包, 一般生成的jar 文件 名称是项目名
- 前言Java 中的 synchronized关键字可以在多线程环境下用来作为线程安全的同步锁。本文不讨论 synchronized 的具体使
- C语言 数据整除判断题目C语言编程实现——输入一个整数,判断它能否被 3,5,7 整除,并输出以下信
- 搜索过滤功能,相信大家都能用到,一般都是针对列表进行过滤的。下面给大家提供一种过滤列表的方法。老规矩,先上图RecycleView搜索过滤器
- 本文实例为大家分享了Unity Shader序列帧动画效果的具体代码,供大家参考,具体内容如下 实现原理主要的思想是设置显示UV
- 前言微信群里的一个提问引发的这个问题,C#异步有多少种实现方式?首先想要知道C#异步有多少中实现方式,首先我们要知道.NET提供的执行异步操
- IO流Java中IO流分为两种,字节流和字符流,顾名思义字节流就是按照字节来读取和写入的,字符刘是按照字符来存取的;常用的文件读取用的就是字
- 前言前两篇我们详细了解了 findById 和 findAll 以及 findAll 的分页查询,如果说JPA只有上面的两种查询功能,那就太
- 本文实例为大家分享了使用OkHttp发送post请求的具体代码,供大家参考,具体内容如下MainActivity.javapublic cl
- java 中HashCode重复的可能性今天有同事提议用String的hashcode得到int类型作为主键。其实hashcode重复的可能
- 一、关联映射举例关系说明数据库创建表,student,teacher关系说明:一个老师可以有多个学生一个学生只有一个老师一个老师对学生:一对
- 实践过程效果代码public partial class Form1 : Form{ public Form1()
- 本文实例为大家分享了C# Winform 自动更新程序,供大家参考,具体内容如下第一步:检查更新检查更新其实无非就是去比较更新包的版本和本地
- 当数据量比较大的时候,我们就需要考虑读写分离了,也就是动态切换数据库连接,对指定的数据库进行操作。在spring中实现动态的切换无非就是利用
- 在项目开发中某些场景必须要用到启动项目后立即执行方式的功能,如我们需要去初始化数据到redis缓存,或者启动后读取相应的字典配置等,这篇文章
- 大家好,在这篇文章中,我们将学习如何添加动画,同时从一个页面到其他在 Flutter。我们将覆盖不同类型的动画和实现基本动画 Flutter
- 前言1、下面是一个效果展示;2、先抱怨一下,在博客上面的抄袭真的非常严重,为了实现一个图片滑动验证,我搜索了挺久的资料,不过内容翻来覆去就是
- 本文实例为大家分享了javaOpenCV-4.0.0 实时人脸识别,供大家参考,具体内容如下package com.xu.opencv;im
- 云计算、大数据地快速发展催生了不少热门的应用及工具。作为老牌语言Java,其生态圈也出来了一些有关云服务、监控、文档分享方面的工具。本文总结
- ListView如何实现简单列表,供大家参考,具体内容如下效果图:啥也没干的ListView张这样:fry.Activity01packag