作为三个特征之一的封装,相对来说还是比较好理解的。
我要看电视,只需要按一下开关和换台就可以了。有必要了解电视机内部的结构吗?有必要碰碰显像管吗?
制造厂家为了方便我们使用电视,把复杂的内部细节全部封装起来,只给我们暴露简单的接口,比如: 电源开关。需要让用户知道的暴露出来,不需要让用户了解的全部隐藏起来。这就是封装。
白话:该露的露,该藏的藏
专业:我们程序设计要追求“高内聚,低耦合”。
高内聚就是类的内部数据操作细节自己完成,不允许外部干涉;
低耦合:仅暴露少量的方法给外部使用。
封装(数据的隐藏)
在定义一个对象的特性的时候,有必要决定这些特性的可见性,即哪些特性对外部是可见的,哪些特性 用于表示内部状态。
通常,应禁止直接访问一个对象中数据的实际表示,而应通过操作接口来访问,这称为信息隐藏。
1、封装的步骤:
1.使用private修饰需要封装的成员变量
2.提供一个公开的方法设置或者访问私有的属性
设置 通过set方法,命名格式: set属性名(); 属性的首字母要大写
访问 通过get方法,命名格式: get属性名(); 属性的首字母要大写
【演示】
1 //对象能在类的外部"直接"访问 2 public class Student{ 3 public String name; 4 public void println(){ 5 System.out.println(this.name); 6 } 7 } 8 public class Test{ 9 public static void main(String[] args){ 10 Student s = new Student(); 11 s.name = "tom"; 12 } 13 }
在类中一般不会把数据直接暴露在外部的,而使用private(私有)关键字把数据隐藏起来
【演示】
1 public class Student{ 2 private String name; 3 } 4 public class Test{ 5 public static void main(String[] args){ 6 Student s = new Student(); 7 //编译报错,在类的外部不能直接访问类中的私有成员 8 s.name = "tom"; 9 } 10 }
如果在类的外部需要访问这些私有属性,那么可以在类中提供对于的get和set方法,以便让用户在类的外部 可以间接的访问到私有属性
【演示】
//set负责给属性赋值 //get负责返回属性的值 public class Student{ private String name; public void setName(String name){ this.name = name; } public String getName(){ return this.name; } } public class Test{ public static void main(String[] args){ Student s = new Student(); s.setName("tom"); System.out.println(s.getName()); } }
2、作用和意义
1. 提高程序的安全性,保护数据。
2. 隐藏代码的实现细节
3. 统一用户的调用接口
4. 提高系统的可维护性
5. 便于调用者调用。
良好的封装,便于修改内部代码,提高可维护性。
良好的封装,可进行数据完整性检测,保证数据的有效性。
3、方法重载
类中有多个方法,有着相同的方法名,但是方法的参数各不相同,这种情况被称为方法的重载。方法的重载 可以提供方法调用的灵活性。
例如:
1 public class Test{ 2 public void test(String str){ 3 } 4 public void test(int a){ 5 } 6 }
方法重载必须满足以下条件
1. 方法名必须相同
2. 参数列表必须不同(参数的类型、个数、顺序的不同)
1 public void test(Strig str){} 2 public void test(int a){} 3 public void test(Strig str,double d){} 4 public void test(Strig str){} 5 public void test(Strig str,double d){} 6 public void test(double d,Strig str){}
3. 方法的返回值可以不同,也可以相同。
在java中,判断一个类中的俩个方法是否相同,主要参考俩个方面:方法名字和参数列表