Java面向对象特性——封装
即:将程序装到箱子中,仅留有接口供外部使用,内部构造对使用者而言不需要关注
高内聚,低耦合
高内聚:类的内部数据操作细节自己完成,不允许外部干涉
低耦合:尽量暴露少的方法给外部使用
封装大部分对属性而言,对方法而言较少涉及封装概念
封装的核心:属性的私有,private/public
public class Student {
private String name;
private int age;
private char sex;
}
public class Demo1 {
public static void main(String[] args) {
Student xiaoming = new Student();
xiaoming.name = "xxx";//此时因为name为Student类的对象xiaoming的private属性,因此不能直接调用,此处会报错;若name为public类型,则不会报错
}
}
属性私有后:get/set
给属性提供可以操作的方法,提供一些public 的get/set方法
get:获得这个数据
set:给这个数据设置值
public class Student {
private String name;
private int age;
private char sex;
//定义public的get方法
public String getName(){
return this.name;//返回当前class内的name
}
}
public class Demo1 {
public static void main(String[] args) {
Student xiaoming = new Student();
String x = xiaoming.getName();
//此处即可取出private的name属性
System.out.println(x);
}
}
public class Student {
private String name;
private int age;
private char sex;
public String getName(){
return this.name;
}
public void setName(String name){
this.name = name;//提供可以修改name的public方法
}
}
public class Demo1 {
public static void main(String[] args) {
Student xiaoming = new Student();
String x = xiaoming.getName();
System.out.println(x);
xiaoming.setName("szc");
x = xiaoming.getName();
System.out.println(x);
}
}//输出为null
// szc
快捷键:alt+insert+(Fn),自动生成public的set/get方法
再选Getter and Setter
封装优点:如可以避免set的数据不合法而破坏系统的逻辑,如age:
public class Student {
private String name;
private int age;
private char sex;
public void setAge(int age) {
if(age>100 || age<0){
this.age = 3;//此时设定年龄不合法,设定为3岁
}else{
this.age = age;//合法时才时实际年龄
}
}
}
public class Demo1 {
public static void main(String[] args) {
Student xiaoming = new Student();
xiaoming.setAge(999);
System.out.println(xiaoming.getAge());
}//此时设定的999岁不合法,因此会设定为3岁
}
封装可以保护设定的数据的合理性
封装意义:
- 提高程序安全性,保护数据
- 隐藏代码的实现细节(如上述,外部只知道可以设置年龄,而并不知道怎么修改具体内容)
- 统一接口
- 方便后期的维护
将类/对象的属性隐藏起来,通过特定的public get/set 方法(操作接口)进行访问/设定,从而保护数据
方法的重载判断:
Java中只有方法名与参数列表都一致,才是相同的方法。
若方法名一样,而参数列表不同,则为方法的重载。