07-Java封装
7.1 封装介绍
封装(encapsulation)就是把抽象出来的数据(属性)和对数据的操作(方法)封装在一起,数据被保护在内部,程序的其他部分只有通过被授权的操作(方法),才能对数据进行操作。
比如电视就是典型的封装,我们开关电视只需要按遥控器的开关按钮就行了,我们并不需要直到内部电路的细节。
封装的好处
- 隐藏实现的细节,方法直接调用传入参数就行。
- 可以对数据进行验证,保证安全合理。
7.2 封装的实现步骤
- 将属性及逆行私有化private,不能直接修改属性。
- 提供一个公共的(public)set方法,用于对熟悉那个判断并赋值:
public void setxxx(类型 参数名) {
//加入数据验证的业务逻辑
属性 = 参数名;
}
- 提供一个公共的(public)get方法,用于获取属性的值:
public 数据类型 getxxx() {//权限判断
return xx;
}
7.3 入门案例
package com.edu.Encap;
public class Encap01 {
public static void main(String[] args) {
Person person = new Person();
person.setName("jack");
person.setAge(30);
person.setSalary(30000);
System.out.println(person.info());
}
}
/*
不能随便查看个人的年龄,工资等隐私,并对设置的年龄进行验证,
年龄合理就设置,否则给默认年龄,必须在1-120之间,工资不能
直接查看,name的长度在2-6个字符之间
*/
class Person {
public String name;//名字公开
private int age;//age私有化
private double salary;//工资私有化
public String getName() {
return name;
}
public void setName(String name) {
if (name.length() >= 2 && name.length() <=6) {
this.name = name;
}else {
System.out.println("名字长度为2-6个字符");
}
}
public int getAge() {
return age;
}
public void setAge(int age) {
//判断年龄是否合法
if (age >= 1 && age <= 120) {//年龄是否合法
this.age = age;
}else {
System.out.println("年龄输入范围错误,1-120");
this.age = 18;//给一个默认年龄
}
}
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
//写一个方法,返回属性信息
public String info() {
return "信息为 name = " + name + "age=" + age + "薪水=" + salary;
}
}
7.4 构造器和setxxx结合
package com.edu.Encap;
public class Encap01 {
public static void main(String[] args) {
Person person = new Person();
person.setName("jack");
person.setAge(30);
person.setSalary(30000);
System.out.println(person.info());
//直接使用构造器访问
Person smith = new Person("smith",200, 30000);
System.out.println("=====simith信息=====");
System.out.println(smith.info());
}
}
/*
不能随便查看个人的年龄,工资等隐私,并对设置的年龄进行验证,
年龄合理就设置,否则给默认年龄,必须在1-120之间,工资不能
直接查看,name的长度在2-6个字符之间
*/
class Person {
public String name;//名字公开
private int age;//age私有化
private double salary;//工资私有化
public Person() {//创建无参构造器
}
public Person(String name, int age, double salary) {//创建有参构造器
// this.name = name;
// this.age = age;
// this.salary = salary;
//如果我们不配置的话,默认是不能判断控制的所以我们需要在构造器下如下设置
setName(name);
setAge(age);
setSalary(salary);
}
public String getName() {
return name;
}
public void setName(String name) {
if (name.length() >= 2 && name.length() <=6) {
this.name = name;
}else {
System.out.println("名字长度为2-6个字符");
}
}
public int getAge() {
return age;
}
public void setAge(int age) {
//判断年龄是否合法
if (age >= 1 && age <= 120) {//年龄是否合法
this.age = age;
}else {
System.out.println("年龄输入范围错误,1-120");
this.age = 18;//给一个默认年龄
}
}
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
//写一个方法,返回属性信息
public String info() {
return "信息为 name = " + name + "age=" + age + "薪水=" + salary;
}
}
7.5 封装课后练习
package com.edu.Encap;
/*
* 定义两个类:Account和AccountTest
* 1. Account类要求具有属性:姓名(长度2-4位),余额必须>20,
* 密码必须是6位,如果不满足则给出提示信息,并给默认值。
* 2. 通过setxxx的方法给Account的属性赋值
* 2. 在AccountTest中测试
* */
public class Account {
//为了封装,将三个属性设置为private
private String name;
private double balance;
private String pwd;
public Account() {//创建无参构造器
}
public Account(String name, double balance, String pwd) {//创建有参构造器
//this.name = name;
//this.balance = balance;
//this.pwd = pwd;
setName(name);
setBalance(balance);
setPwd(pwd);
}
public String getName() {
return name;
}
public void setName(String name) {
if (name.length() >= 2 && name.length() <= 6) {
this.name = name;
}else{
System.out.println("用户名2-6字符");
this.name = "无名";
}
}
public double getBalance() {
return balance;
}
public void setBalance(double balance) {
if (balance > 20) {
this.balance = balance;
}else{
System.out.println("余额不能小于20");
this.balance = 0;
}
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
if(pwd.length() >= 6){
this.pwd = pwd;
}else{
System.out.println("密码位数不对");
this.pwd = "000000";
}
}
//显示账号信息
public void ShowInfo(){
System.out.println("name = " + name + "balance=" + balance + "pwd = " + pwd);
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
· 零经验选手,Compose 一天开发一款小游戏!