封装
面向对象的三大特征:封装、多态、继承
封装在java中的体现:
1.方法就是一种封装
2.关键字private也是一种封装
封装就是将一些细节信息隐藏起来,对外界不可见;将具体的步骤封装为一个方法,外界只需要调用该方法,并不需要关心该方法是怎么实现的
方法的封装
public class Demo02Method {
public static void main(String[] args) {
int[] array = {5,15,25,20,100};
int max = getMax(array); //外界调用该方法不需要考虑如何实现
System.out.println("最大值:"+max);
}
//返回最大值
public static int getMax(int[] array){
int max = array[0];
for (int i = 0; i < array.length; i++) {
if (array[i] > max){
max = array[i];
}
}
return max;
}
}
private关键字
问题描述:定义Person的age是无法阻止不合理的数值被设置进来(例如-20岁)
解决方法:用private关键字将需要保护的成员变量进行修饰。在get/set方法里进行筛选
一旦使用private进行修饰,那么本类当中仍然可以随意访问。但是本类以外就不可以直接访问了。
间接访问private修饰的变量,就定义一对get/set方法
格式必须是getXxx/setXxx
对于getXxx来说,不能有参数,返回值类型和成员变量对应;
对于setXxx来说,不能有返回值,参数类型和成员变量对应;
作用:可以阻止不合理的数据赋值进来,提高代码的安全性
public class Person {
String name;
private int age;
public void show(){
System.out.println("我叫:"+name+","+"年龄:"+age);
}
//这个成员方法专门用于向age设置数据
public void setAge(int num){
if(num < 100 && num >= 0){
age = num;
}else {
System.out.println("数据不合理");
}
}
//专门用于获取age的数据
public int getAge(){
return age;
}
}
//
package month9day6;
public class Demo03Person {
public static void main(String[] args) {
Person person = new Person();
person.show();
person.name = "张三";
// person.age = -20; //类外直接访问private内容是错误写法
person.setAge(20); //间接访问private修饰的内容
person.show();
}
}