java学习笔记6

11. 类的封装

​ 在Java中,**封装(Encapsulation)**是面向对象编程中的重要概念,它指的是将类的数据(属性)和行为(方法)绑定在一起,并对外部隐藏数据的具体实现细节,只通过公共方法来访问和操作数据。这有助于提高代码的安全性、可维护性和灵活性。

11.1 为什要封装

​ java编程思想中,封装被认为是一种保护屏障,防止本类代码和数据被外部程序随机访问,从而造成数据不安全。

public class Student {
   
  public String name;
  public int age;

  public void read() {
   
    System.out.println("我是" + name + ",今年" + age);
  }
}

public class StudentTest {
   
  public static void main(String[] args) {
   
    Student stu = new Student();
    stu.name = "tom";
    stu.age = -18;
    stu.read(); // 我是tom,今年-18
  }
}

​ 在上面的程序中,输出信息是: ”我是tom,今年-18“。 虽然程序编译执行没有任何问题,但是在现实生活中,age值是负数,显然不符合逻辑。为了避免这种错误,设计类时,应该对成员属性进行限定,不允许外界随意访问,这就需要实现类的封装。

11.2 如何实现封装

​ java中类的封装步骤主要有以下几步:

​ 1. 私有化类属性,不允许外部进行访问和操作。

​ 2. 提供公共的setter 和 getter 方法,便于对属性进行赋值和获取。

​ 3. 在方法内部对属性的赋值过程进行判断是否合法。

public class Student {
   
  // 1. 私有化属性
  private String name;
  private int age;

  // 2. 提供公共的setter 和 getter方法,用于操作属性
  public void setAge(int age) {
   
    // 3. 判断赋值给属性的参数是否合法
    if (age <= 0) {
   
      System.out.println("学生的年龄是大于0的整数!");
      this.age = 18; // 可以设置一个默认值
    } else {
   
      this.age = age;
    }
  }

  public int getAge() {
   
    return this.age;
  }

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

  public String getName() {
   
    return this.name;
  }

  public void read() {
   
    System.out.println("我是" + this.name + ",今年" + this.age);
  }
}


public class StudentTest {
   
  public static void main(String[] args) {
   
 	Student student = new Student();
    // 1. 通过setter方法设置对象的属性值
    student.setAge(-18); // 学生的年龄是大于0的整数!
    student.setName("tom");
    student.read(); // 我是tom,今年18
    // 2. 使用getter方法获取对象的属性值
    String name = student.getName();
    System.out.println("name=" + name);
  }
}

11.3 封装的好处

​ Java中的封装提供了一些好处,有助于更好的代码组织、安全性和可维护性。以下是封装的主要优点:

11.3.1 数据隐藏
  • 封装对外部世界隐藏了对象的内部状态,允许通过方法进行受控访问。
  • 通过将数据设为私有并提供公共方法(getter和setter),可以保持数据的完整性。
11.3.2 提高安全性
  • 通过封装,关键数据只能通过定义的方法隐藏和访问。
  • 防止未经授权的访问或操作数据,增强安全性。
11.3.3 增强可重用性
  • 封装通过分离关注点和促进结构的清晰,使代码更干净、更易读。
  • 封装的类在应用程序的不同部分更容易理解和重用。

11.4 访问控制

​ 针对类、成员方法和属性,java提供了4中访问控制权限,分别是private、default、protected、public。下面的图是这4种访问权限按级别由小到大依次列出:

通过一张表可以比较各种访问权限的区别:

访问范围 private default protected public
同类中
同包中
不同包子类
全局范围
package cn.bdqn;

public class Person {
   
  private String name;// private 权限
  public int age;//public 权限
  protected String gender;// protected 权限
  String color; // default 权限

  public Person(String name, int age, String gender, String color) {
   
    this.name = name;
    this.age = age;
    this.gender = gender;
    this.color = color;
  }

  private void displayDetails() {
   
    System.out.println("Name: " + name);
    System.out.println("Age: " + age);
    System.out.println("Gender: " + gender);
  }

  public void introduce() {
   
    System.out.println("Hello, my name is " + name + ".");
  }

  protected void displayGender() {
   
    System.out.println("Gender: " + gender);
  }<
  • 35
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值