定义
面向对象三大特征:封装、继承、多态
封装性体现:
- 方法
- 关键字private
作用:隐藏代码细节,使外界不可见,控制外部访问成员变量,阻止不合理数值设置,增强安全性
优点:减少耦合、便于理解、维护
方法封装
package EncapsulationTest;
public class EncapsulationPersonTest {
public static void main(String[] args) {
int[] myArray = {3,2,30,239,29};
System.out.println(getMax(myArray));
}
public static int getMax(int[] myArray) {
int max_num = myArray[0];
for (int i = 1; i < myArray.length; i++) {
if (myArray[i] > max_num) {
max_num = myArray[i];
}
}
return max_num;
}
}
实现Java封装的步骤
- 修改属性的可见性来限制外部类对属性的访问(一般限制为private私有)
- 对私有属性创建一对赋、取值方法,用于外部访问
实例
package TestEncapsulation;
/*
外部类访问该类成员变量的入口,被称为getter和setter方法
访问类中私有成员变量,都要通过这些getter和setter方法
一般的用getNN() setNN(), boolean类型的用setXX() isXX()
*/
public class EncapsulationPerson {
// 设置为private,只有本类才能访问,外部无法直接访问
private String name;
private int age;
private boolean male;
// 访问类中私有成员变量,都要通过这些getter和setter方法
public void setAge(int age) {
this.age = age;
// this 解决成员变量(private String name)和局部变量(setName(String name)中的name变量)之间发生的同名的冲突
}
public int getAge() {
return age; // 不用加this
}
public void setName(String myName) {
name = myName; // 不同名,不需要加this
}
public String getName() {
return name;
}
public void setMale(boolean b) {
male = b;
}
public boolean isMale() {
return male;
}
}
package TestEncapsulation;
public class TestEncapsulation {
public static void main(String[] args) {
EncapsulationPerson person = new EncapsulationPerson();
System.out.println("age: " + person.getAge()); // 成员变量,未赋值,会有默认值0
person.setAge(23);
System.out.println("age: " + person.getAge());
System.out.println("name: " + person.getName()); // 成员变量,未赋值,会有默认值null
person.setName("doudou");
System.out.println("name: " + person.getName());
person.setMale(true);
System.out.println("is male? " + person.isMale());
// System.out.println(person.name); // name 在 TestEncapsulation.EncapsulationPerson 中是 private 访问控制
}
}