封装
面向对象三大语言特征:封装性、继承性、多态性。
封装性:封装就是将一些细节隐藏起来,对于外界不可见。
- 方法就是一种封装。
- 关键字
private
也是一种封装。
封装性-方法
举例1:方法体现封装性,将方法的具体实现细节进行封装,只关注数据的输入和获取。
package cn.test01;
public class Test {
public static void main(String[] args) {
int [] array = new int[]{12,13,14,15,16,11,10,9};
System.out.println("最大值:"+getMax(array));
}
//给一个int数据类型的数组,返回其中最大值。
public static int getMax(int[] array){
int max = array[0];
for (int i = 1; i < array.length; i++) {
if (max < array[i]) {
max = array[i];
}
}
return max;
}
}
封装性-private
举例2:private
关键字体现封装性,一旦使用private
关键字,本类中可以随意访问,但是本类范围之外就不可以直接访问了,但是可以定义一对Getter
/Setter
方法来间接访问。
package cn.test01;
public class Test {
public static void main(String[] args) {
Person per = new Person();
per.Show(); //姓名:null 性别:女 年龄:0
per.name = "张三";
per.setAge(-18); //性别设置不合理!
per.setMale("男女");
per.Show(); // 年龄设置不合理! 姓名:张三 性别:女 年龄:0
per.setAge(18);
per.setMale("男");
per.Show(); //姓名:张三 性别:男 年龄:18
}
}
package cn.test01;
public class Person {
String name; //姓名
//问题描述:如果不进行private进行修饰,无法阻止不合理的数据进来
//解决方案:用private关键字将需要保护成员变量进行修饰。
private boolean male; //性别
private int age;//年龄
//输出姓名和年龄。
public void Show(){
System.out.println("姓名:"+name+" 性别:"+isMale()+" 年龄:"+age);
}
//这个成员方法专门用于向Male中设置数据。
public void setMale(String male1){
if (male1=="男"){ 数据把关,对合理性进行判断。
male = true;
}else if (male1 == "女") {
male = false;
}else {
System.out.println("性别设置不合理!");
}
}
//这个成员方法专门用于获取male中的数据。注意boolean类型Getter方法格式不一样。
public String isMale(){
if (male==true){ 数据把关,对合理性进行判断。
return "男";
}else {
return "女";
}
}
//这个成员方法专门用于向age中设置数据。
public void setAge(int age1){
if (age1 >= 0 && age1 <= 100) { //数据把关,对合理性进行判断。
age = age1;
}else {
System.out.println("年龄设置不合理!");
}
}
//这个成员方法专门用于获取age的数据。
public int getAge(){
return age;
}
}
注意事项:
Getter
/Setter
命名方法命名规则:getXxx
/setXxx
。 (Xxx
代表成员变量首字母大写)。- 对于
Getter
方法来说,不能有参数,但要有返回值并和成员变量对应。对于Setter
方法来说,不能有返回值,但要有参数并和成员变量对应。 - 对于
boolean
类型的成员变量,Getter
方法一定要写成isXxx
的形式,而Setter
方法规则不变。