1. 封装性(Encapsulation)

1.1 概述

封装是面向对象三大特征之一(封装、继承、多态),核心思想是隐藏内部细节,对外提供公共访问方式

1.2 访问修饰符

  • 1.2.1 public:公开的,类的内部和外部都可以访问
  • 1.2.2 private:私有的,只能在本类内部访问,外部无法直接访问

1.3 成员变量与局部变量

  • 1.3.1 成员变量:声明在类中方法外,整个类内都可访问,有默认值
  • 1.3.2 局部变量:声明在方法内部,只在该方法内有效,无默认值

1.4 getter / setter 方法

封装的属性需要对外提供公共的访问方式,即 getter(取值)和 setter(赋值)方法。

  • 1.4.1 getter 格式:有返回值,返回私有属性
  public String getPassword() {
      return password;
  }
  • 1.4.2 setter 格式:有参数,修改私有属性
  public void setPassword(String password) {
      this.password = password;
  }

1.5 this 关键字

  • 1.5.1 作用:当参数名与成员变量名相同时,用 this.成员变量名 明确指代当前对象的成员变量,与局部参数区分
  public void setPassword(String password) {
      this.password = password; // this.password 是成员变量,password 是参数
  }

1.6 private 方法

  • 1.6.1 私有方法:用 private 修饰的方法,外部无法直接调用,只能在类的内部被其他方法调用
  private void study() {
      System.out.println("good good study, day day up");
  }
 
  public void show() {
      System.out.println("这是show()方法");
      study(); // 内部调用私有方法
  }

1.7 对象独立性回顾

  • 1.7.1:每个对象拥有独立的成员变量,person1 修改密码不影响 person 的密码
  person1.setPassword("789415");
  System.out.println(person1.getPassword()); // 789415
  System.out.println(person.getPassword());  // 000000

2. 示例代码

2.1 Demo01

package com.itszt.day04;
 
public class Demo01 {
    public static void main(String[] args) {
        Person person = new Person();
        System.out.println("person.age = " + person.age);
        System.out.println("person.name = " + person.name);
 
        Person person1 = new Person();
        System.out.println(person1.getPassword());    // 000000
        person1.setPassword("789415");
        System.out.println(person1.getPassword());    // 789415
        System.out.println(person.getPassword());     // 000000(各自独立)
 
        person.show(); // 通过公共方法间接调用私有方法
    }
}
 
class Person {
    public int age;
    public String name;
    private String password = "000000";
 
    public String getPassword() {
        return password;
    }
 
    public void setPassword(String password) {
        this.password = password;
    }
 
    private void study() {
        System.out.println("good good study, day day up");
    }
 
    public void show() {
        System.out.println("这是show()方法");
        study();
    }
}

2.2 Test

package com.itszt.day04;
 
public class Test {
    public static void main(String[] args) {
        Person person = new Person();
        // System.out.println(person.password);        // 报错:private 外部不可直接访问
        // System.out.println(person.password = "456799"); // 报错:同上
    }
}

3. 总结

知识点核心要点
封装隐藏细节,对外提供公共访问方式
public类内外均可访问
private仅类内部可访问,外部直接访问报错
成员变量类中方法外,有默认值
局部变量方法内,无默认值
getter对外提供读取私有属性的方法
setter对外提供修改私有属性的方法
this区分同名成员变量与参数
私有方法只能在类内部被调用