示例解析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
0
投稿
猜你喜欢
- 1.引言在开发中,拖放是一种比较常见的手势操作,使用它能够让应用的交互更加地便捷和友好,本文将简要介绍如何为Android中的View添加拖
- 自然排序TreeSet集合在存储数据时有一定的顺序,它会将一些数据进行比较,比较调用的是comparaTo()方法,该方法是在Compara
- eclipse运行tomcat提示端口被占用今天碰到一个问题,在eclipse中运行一个程序,eclipse里面的tomcat一启动就报错说
- 引言你在服务端的安全管理使用了 Spring Security,用户登录成功之后,Spring Security 帮你把用户信息保存在 Se
- Java 8支持动态语言,看到了很酷的Lambda表达式,对一直以静态类型语言自居的Java,让人看到了Java虚拟机可以支持动态语言的目标
- 方法重载概述方法重载指同一个类中定义的多个方法之间的关系,满足下列条件的多个方法互相构成重载* 多个方法在同一个类中* 多个放方法具有相同方
- 1 redis主从复制的概念多机环境下,一个redis服务接收写命令,当自身数据与状态发生变化,将其复制到一个或多个redis。这种模式称为
- “Java is still not dead—and people are starting to figure that out.”本教
- java中this与super关键字的使用方法这几天看到类在继承时会用到this和super,这里就做了一点总结,与各位共同交流,有错误请各
- using System; using System.Collections.Generic; using System.Text; usi
- MyBatis使用RowBounds实现的分页是逻辑分页,也就是先把数据记录全部查询出来,然在再根据offset和limit截断
- 在平常工作中我们经常会遇到maven引用的jar包冲突的事情,这时候我们就需要找出冲突的包,并将低版本或者缺少某些方法的jar给剔除掉。这个
- 1 什么是cookie浏览器与WEB服务器之间是使用HTTP协议进行通信的,当某个用户发出页面请求时,WEB服务器只是简单的进行响应,然后就
- 最近开发了比较多的接口,因为没有可参考的案例,所以一开始一直按照我的理解进行开发。开发多了发现自己每个结果都写了相同的代码:try() {}
- 在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现。对于文件上传,浏览器在上
- 效果和代码都非常直观:实例1:TimePicker<RelativeLayout xmlns:android="http:/
- 在很多场景下,maven不能直接访问到外网时,使用代理是其中常见的一种方式。这篇文章整理一下常见的maven中设置代理的方法。代理服务器代理
- 本文实例讲述了Java面向接口编程之简单工厂模式。分享给大家供大家参考,具体如下:一 代码interface Output{ /
- 前言《摩尔庄园》前段时间上线, 持续超出市场预期,相信也有不错的收益。游戏好玩,所有玩家看到了前端,但是做一款游戏,离不开后台游戏服务器的支
- 我们有很多 Coding Style 或 代码规范。 但这一条可能会经常被我们所遗忘,就是我们 经常会在函数的参数里使用bool参数,这会大