意义
我们程序设计要追求“高内聚,低耦合”。高内聚就是类的内部数据操作细节自己完成,不允许外部干涉;低耦合:仅暴露少量的方法给外部使用
便于调用者调用。
良好的封装,便于修改内部代码,提高可维护性。
良好的封装,可进行数据完整性检测,保证数据的有效性。
使用访问控制符,实现封装
同一个类 | 同一个包中 | 子类 | 所有类 | |
private | * | |||
default(即不加修饰符的时候) | * | * | ||
protected | * | * | * | |
public | * | * | * | * |
1.属性一般使用private.(除非本属性确定会让子类继承并且使用)
提供相应的get/set方法来访问相关属性. 这些方法通常是public,从而提供对属性的读取操作。 (注意:boolean变量的get方法是用:is开头!)
2.一些只用于本类的辅助性方法可以用private,希望其他类调用的方法用public。
package cn.bjsxt.oop.encapsulation01; public class Man { private String name; private String id; private boolean man; public static int cc; public static final int MAX_SPEED = 120; public String getName(){ return name; } public void setName(String name){ this.name = name; } public String getId() { return id; } public void setId(String id) { this.id = id; } public boolean isMan() { return man; } public void setMan(boolean man) { this.man = man; } }
package cn.bjsxt.oop.encapsulation01; public class Test01 { private String str; protected void print(){ String s = str; System.out.println("Test01.print()"); } } class Test001 extends Test01 { public void pp(){ super.print(); } public static void main(String[] args) { Test01 t = new Test01(); t.print(); } } package cn.bjsxt.oop.encapsulation01; public class Test02 { public static void main(String[] args) { Test01 t = new Test01(); t.print(); } } package cn.bjsxt.oop.encapsulation02; import cn.bjsxt.oop.encapsulation01.Test01; public class Test0001 extends Test01 { public void ttt(){ super.print(); print(); } public static void main(String[] args) { Test0001 t = new Test0001(); t.print(); } } package cn.bjsxt.oop.encapsulation02; import cn.bjsxt.oop.encapsulation01.Test01; public class Test03 { public static void main(String[] args) { Test01 t = new Test01(); // t.print(); } }