java的封装
学习编程和有一段时间了,现在整理一些东西,留着自己以后翻阅,有可能也能帮助其他人。
封装:
封装是指将对象的状态信息隐藏在对象内部,不允许外部的程序直接访问对象内部的信息,而是通过该类所提供的方法来实现对内部信息的操作和访问。
封装是面向对象编程语言对客观世界的模拟,客观世界里的属性都是被隐藏在对象内部,外界无法直接操作和修改。
封装的好处很多:
1、 隐藏类的实现细节
2、 让使用者只能通过预定的方法来访问数据,从而可以在该方法里加入控制逻辑,限制对属性的不合理访问。
3、 可进行数据检查,从而有利于保证对象信息的完整性。
4、 便于修改,提高代码的可维护性。
访问控制符:
Java中提供了三种访问控制符:private ,protected和public,另外还有一个不加任何访问控制符的访问控制级别,因此java提供了四种访问控制级别。即:private,default,protected和public。含义分别表示私有的,默认的,受保护的和公有的访问修饰符。这四个访问级别中default并没有对应的访问控制符,当不使用任何修饰符来修饰类和成员(属性/方法)时,系统默认使用该访问控制符。这些访问修饰符既可以修饰类中的属性,又可以修饰类中的方法,而public和default还可以修饰类。在同一个java文件里,公有类有且仅有一个,并且该文件命名为类名.java。
Java访问修饰符就是确定类中属性或方法的访问权限,换句话说,就是这些属性和方法所起的作用范围。
private,私有的访问权限,也是最严格的访问权限,仅只能在设置了该权限的类中访问,利用这个访问权限,表现出封装思想。
default,默认的访问权限,也是可以省略的访问权限,它不仅能在设置了该权限的类中访问,也可以在同一包中的类或子类中访问。
protected,受保护的访问权限(子类访问权限),如果一个成员(属性或是方法)使用了这个访问控制符修饰,那么这个成员既可以被一个包中的其他类访问,也可以被不同包中的子类访问,通常,如果用protected来修饰一个方法,通常是希望其子类来重写这个方法。
public,公有的访问权限,也是最宽松的访问权限,不仅可以是同一个类或子类,还是同一个包中的类或子类,又还是不同包中的类或子类,都可以访问。
要想更深入地理解这些访问权限,一方面需要明白各自的作用域,另一方面更是要弄清楚各自所体现出来的编程思想,比方说,private表现的封装思想,public表现的面向接口编程的思想等。
例如:
public class Test { public static void main(String[] args) { Human aPerson = new Human(160); System.out.println(aPerson.getHeight()); aPerson.growHeight(170); System.out.println(aPerson.getHeight()); aPerson.repeatBreath(100); } } class Human { /** * constructor */ public Human(int h) { this.height = h; System.out.println("I'm born"); } /** * accessor */ public int getHeight() { return this.height; } /** * mutator */ public void growHeight(int h) { this.height = this.height + h; } /** * encapsulated, for internal use */ private void breath() { System.out.println("hu...hu..."); } /** * call breath() */ public void repeatBreath(int rep) { int i; for(i = 0; i < rep; i++) { this.breath(); } } private int height; // encapsulated, for internal use }
在面向对象设计和编程的过程中,归根结底就是类的设计。而要设计出不仅满足当前需求同时也能符合未来需求的类,就很有必要对类中属性和行为设置合适的访问 权限。那些应该为私有的,那些又应该为公有的,还有那些又应该为受保护的等,都应该给予合理的规划和布局,一来保证程序的功能要求,二来要体现程序的扩展 性能,三来要呈现程序友好性质。总之,程序应该更好地服务用户。而访问权限在这样宏伟目标里扮演着重要角色。