浅理解Java的中封装

47 阅读2分钟

首先我们通过一个实例来感受一下封装:

class Student{
	public int age;
	public String name;
	
	public void showInfo(){
		System.out.println("Name is:" + this.name + " and age is: " + this.age)
	}
}

public class Test{
	public static void main(String[] args) {
		Student s = new Student();
		s.name = "Forlogen";
		s.age = -10;
		showInfo();
	}

}

此时函数的输出为

Name is: Forlogen and age is: -10

可以看出我们可以给对象的name属性赋值,可以正常运行但是却不符合常理,为了满足对于合理性的要求就可以使用封装。另外,如果我们不想让对象直接使用类中的属性变量时,同样可以用到封装的思想。


封装:

封装就是隐藏实现细节,将属性私有化,提供公有方法访问私有属性,通过这些公有方法访问私有属性 。

封装的实现

  • 修改属性的可见性来限制对属性的访问
  • 为每个属性创建一对赋值(setter)方法和取值(getter) 方法,用于对这些属性的访问
  • 在setter和getter方法中,加入对属性的存取限制

对于上面的例子我们用封装再实现一遍:

class Studeng{
	private String name;  
	private int age;          

	public int getAge() {
		return this.age;
	}
	public void setAge(int age) {
		if (age < 0 || age > 150) {
			System.out.println("Please use correct age...");
			// 此时this.age就是默认值0
		} else {
			this.age = age;
		}
     }
	public String getName() {
		return this.name;
	}
	public void setName(String name) {
		this.name = name;
	}
	
	public void showInfo(){
		System.out.println("Name is:" + this.name + " and age is: " + this.age)
	}
     
}

public class FengzhuangDemo {
	public static void main(String[] args) {
		Student s = new Student();
		s.name = "Forlogen";
		s.age = -10;
		showInfo();
	}
}

此时的输出就是:

Please use correct age...
Name is: Forlogen and age is: 0

所以,使用封装增加了数据访问限制,增强了程序的可维护性

封装的优点

  • 隐藏一个类的实现细节
  • 防止对封装数据的未经授权的访问
  • 有利于保证数据的完整性
  • 便于修改,增强代码的可维护性
  • 有选择地向外界提供数据