程序设计追求“高内聚,低耦合”。高内聚就是类的内部数据操作细节自己完成,不允许外部干涉。低耦合是仅暴露少量的方法给外部使用,尽量方便外部调用。
编程中封装的具体优点:
1.提高代码的安全性
2.提高代码的复用性
3.“高内聚”:封装细节,便于修改内部代码,提高可维护性
4.“低耦合”:简化外部调用,便于调用者使用,便于扩展和写作。
java中使用“访问控制符”来控制哪些细节需要封装。哪些细节需要暴露的。Java中4种“访问控制符”。分别为:private、default、protected、public,他们说明了面相对象的封装性。
测试案例代码:
package com.jackfujia.oo2;
/**
*
*测试封装
* @author Administrator
*
*/
public class TestEncapsulation {
public static void main(String[] args) {
Human h = new Human();
//h.age = 13; 这里因为下面的age被封装起来了。对其不可见。所以无法调用
h.name = "福福福福福";
h.height = 200;
}
}
class Woman extends Human{
void sayAge2() {
// System.out.println(age); 子类也无法使用父类的私有属性和方法。
}
}
package com.jackfujia.oo;
import com.jackfujia.oo2.Human;
public class TestEncapsulation2 {
Human h = new Human();
// h.name = "俯卧"; name为默认default属性,不能被不同包的类访问。
//h.height = 100; 不同包的不同类
}
class Girl extends Human{
void shenGao() {
System.out.println(height); //不同包的子类可以使用
}
}
package com.jackfujia.oo2;
public class Human{
private int age; //加了private,只能在这个类里面用
String name; //默认default。默认在包里的都能用
protected int height;
void sayAge() {
System.out.println(age);
}
}
封装的使用细节:
类的属性的处理:
1.一般使用private访问权限
2.提供相应的get、set方法来访问相关属性,这些方法通常是public修饰的。以提供对属性的赋值与读取操作。(注意!boolean变量的get方法是is开头。)
3.一些只用于本类的辅助性方法,可以使用private修饰,希望其他类调用的方法用public修饰。
案例小代码:
package com.jackfujia.oo2;
/**
* 仍然测试封装
* @author Administrator
*
*/
public class Person4 {
private int id;
private String name;
private int age;
private boolean man;
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
if(age >= 1 && age <= 130) {
this.age = age;
}else {
System.out.println("请输入正常的年龄");
}
}
public String getName() {
return this.name;
}
public int getAge() {
return this.age;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public boolean isMan() {
return man;
}
public void setMan(boolean man) {
this.man = man;
}
}
package com.jackfujia.oo2;
/**
*
*测试封装
* @author Administrator
*
*/
public class TestEncapsulation {
public static void main(String[] args) {
Human h = new Human();
//h.age = 13; 这里因为下面的age被封装起来了。对其不可见。所以无法调用
h.name = "福福福福福";
h.height = 200;
Person4 p4 = new Person4();
p4.setAge(14);
p4.setName("我你大爷!");
System.out.println(p4.getName());
System.out.println(p4.getAge());
}
}
class Woman extends Human{
void sayAge2() {
// System.out.println(age); 子类也无法使用父类的私有属性和方法。
}
}