当前位置: 首页 > article >正文

Java第二阶段---11封装---第一节 封装(Encapsulation)

1. 什么是封装

封装就是将类的部分(也可能是所有)属性和方法隐藏起来,不允外部程序直接访问,只能通过该类提供的公开的方法(接口)来访问类中定义的属性和方法。封装是面对对象的三大特征之一。

2.如何使用封装

示例

public class Person {

    public String name;//姓名

    public int age;//年龄

    public String secret;//秘密

    //定义了一个构造方法用来创造对象
    public Person(String name,int age, String secret){
        this.name = name;
        this.age = age;
        this.secret = secret;
    }
}

修改属性的可见性:将类中定义的所有属性全部修改为private修饰

public class Person {

    private String name;//姓名

    private int age;//年龄

    private String secret;//秘密

    //定义了一个构造方法用来创造对象
    public Person(String name,int age, String secret){
        this.name = name;
        this.age = age;
        this.secret = secret;
    }
}

创建公开的getter/setter方法:用于读取/修改属性值

public class Person {

    private String name;//姓名

    private int age;//年龄

    private String secret;//秘密

    //定义了一个构造方法用来创造对象
    public Person(String name,int age, String secret){
        this.name = name;
        this.age = age;
        this.secret = secret;
    }

    //ALT + INSERT
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        if(age<0){
            System.out.println("你输入的年龄不合法,年龄必须为 > 0 的整数");
        }else{
            this.age = age;
        }
    }

    public String getSecret() {
        return secret;
    }

    public void setSecret(String secret) {
        this.secret = secret;
    }
}

在getter/setter方法中加入控制语句:用于对属性值的合法性校验

  public void setAge(int age) {
        if(age<0){
            System.out.println("你输入的年龄不合法,年龄必须为 > 0 的整数");
        }else{
            this.age = age;
        }
    }

3. 为什么要使用封装

a.封装提高了代码的重用性。因为封装会提供对外访问的公开的方法,而方法可以重用,因此封装提高了代码的重用性。

b.封装提高了代码的可维护性。

比如:年龄在设计时只考虑到了负数的情况,没有考虑实际生活中的情况,人的年龄一般都不会超过200岁,因此还需要加上一层验证

public void setAge(int age){
	if(age < 0 || age>200){
		System.out.println("你输入的年龄不合法,年龄必须为0~200之间的整数");
	}else{
		this.age = age;
	}
}


http://www.kler.cn/news/334420.html

相关文章:

  • Relu激活
  • 前端性能优化 面试如何完美回答
  • Oracle数据库中表压缩的实现方式和特点
  • Spring Cloud之OpenFeign的具体实践
  • Qt如何将外部窗口嵌入部件中
  • 若依--文件上传前端
  • 国创——基于深度学习的实时姿态识别算法
  • 打卡第三天 P5729 【深基5.例7】工艺品制作
  • 【web安全】——SSRF服务器端请求伪造
  • 【Linux】进程控制(创建、终止、等待、替换)
  • 交换排序:冒泡排序、递归实现快速排序
  • 深度学习全景进阶:最新Python深度学习进阶与前沿应用
  • Gitlab flow工作流
  • 力扣刷题之2306.公司命名
  • 春秋云镜靶场之CVE-2022-28525
  • 关于鸿蒙next 调用系统权限麦克风
  • 设计模式(3)builder
  • 序列化与反序列化基础及反序列化漏洞(附案例)
  • S7-200 SMART的数据类型说明
  • Stable Diffusion绘画 | 插件-Deforum:动态视频生成(中篇)