面向對象的三大特性
封裝
將數據(屬性)和功能(方法)包裝在一起,形成一個不可分割的整體。對使用者提供訪問的接口(方法的調用)另一種簡單的說法是,將屬性私有化,對外提供公共的getter和setter方法
使用封裝的優勢:安全(屏蔽非法操作,隱藏類的實現細節)
實例:
package characteristic.encapsulation;
/**
* 用於演示封裝
* 類中封裝了屬性和方法
* @author 學霸聯盟 - 趙燦
*/
public class Person {
//私有的屬性年齡
private int privateAge;
//公共的屬性年齡,用於和私有年齡做對比
public int publicAge;
//設置私有年齡,該方法對屬性privateAge進行了封裝
public void setPrivateAge(int age) {
if(age < 0){
System.out.println("輸入的年齡有誤!");
} else {
privateAge = age;
}
}
//獲取私有的年齡
public int getPrivateAge() {
return privateAge;
}
}
package characteristic.encapsulation;
/**
* 測試封裝
* @author 學霸聯盟 - 趙燦
*/
public class Test {
public static void main(String[] args) {
//創建Person類的對象
Person p = new Person();
//設置公有的年齡
p.publicAge = -1;
//輸出公有的年齡
System.out.println("公有的年齡:" + p.publicAge);
//設置私有的年齡
p.setPrivateAge(-1);
//輸出私有的年齡
System.out.println("私有的年齡:" + p.getPrivateAge());
}
}
運行結果:
公有的年齡:-1
輸入的年齡有誤!
私有的年齡:18
其實方法也可以看成類內部的一種封裝,將事項某個功能的一些列代碼封裝到一個方法中,方法名就是方法提供給外界使用的接口。這樣就實現了代碼的複用(重複的使用),當有多處需要同樣功能代碼的時候,就可以重複的調用這一方法
/**
* 演示輸出人員的姓名和年齡信息
* @author 學霸聯盟 - 趙燦
*/
public class Demo {
public static void main(String[] args) {
Person p1 = new Person("張三", 18);
Person p2 = new Person("李四", 20);
/**************** 方式一:直接輸出兩個對象的姓名的年齡 *******************/
System.out.println("----------方式一----------");
System.out.println("姓名:" + p1.name + " 年齡:" + p1.age);
System.out.println("姓名:" + p2.name + " 年齡:" + p2.age);
/**************** 方式二:調用輸出信息的方法輸出兩個對象的姓名和年齡 *******************/
System.out.println("----------方式二----------");
p1.printInfo();
p2.printInfo();
}
}
class Person {
String name;
int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public void printInfo() {
System.out.println("姓名:" + name + " 年齡:" + age);
}
}
運行結果:
----------方式一----------
姓名:張三 年齡:18
姓名:李四 年齡:20
----------方式二----------
姓名:張三 年齡:18
姓名:李四 年齡:20
哪種簡單就不用我說了吧封裝的優勢在於複用代碼,安全性,隱私性等