Java面向對象的封裝你了解嗎
面向對象思想之封裝
或許大家都聽說過java是純面向對象語言,面向對象思想也就是我們常說的OOP,我們聽說最多的思想就是繼承,封裝,多態(tài),今天我們來講一講封裝。
什么是封裝呢?
封裝就是一種將數(shù)據(jù)和操作數(shù)據(jù)的方法進行有機結合,一種函數(shù)抽象類的接口實現(xiàn)了對細節(jié)的封裝和隱藏,使得我們只需要調(diào)用對外開放的公共接口去實現(xiàn)與對象的交互。我們可以把封裝理解為一種保護的屏障,需要一些嚴格的接口進行控制,我們可以修改自己實現(xiàn)類的內(nèi)部結構的代碼,但是不可以修改那些公共接口。這就提供更好的安全性。
封裝的好處意義
- 好的封裝能夠減少耦合度
- 能夠對成員變量更精準的控制
- 實現(xiàn)對細節(jié)的封裝和隱藏,使得更具有安全性。
- 可以修改類的內(nèi)部代碼,不用修改那些公共的接口
講到封裝那必然講到關鍵字private也就是訪問修飾限定符。
回憶一下我們見過哪些訪問修飾限定符呢?有public ,還有成員變量什么也不加的默認權限英文是default,還有就是我們今天要講解的private,下一篇文章會講解protected。
那private到底有什么用處呢?
我們在來回憶一下上篇文章講過的類和對象,下面我會創(chuàng)建一個學生類。
//創(chuàng)建一個學生類
class Student {
public String name;//學生姓名
public int age;//學生年齡
public String sex;//學生性別
public double score;//學生分數(shù)
public void sleep() {
System.out.println("我要睡覺了!??!");
}
public void eat() {
System.out.println("我要干飯了?。?!");
}
public void exam() {
System.out.println("我要考試了!?。?);
}
}
public class TestDemo {
public static void main(String[] args) {
Student student = new Student();//利用new關鍵字實例化一個對象
student.age = 19;
student.name = "厚積薄發(fā)";
student.score = 99.9;
student.sex = "男";
}
}以上的代碼我們將這個學生成員變量分別賦值。這樣寫會不會有什么不足呢?
想一想,如果我們每次要定義一個學生對象,每次都要這樣賦值會不會有點太麻煩?今天我們講到封裝就會讓它更簡單一些。請看下面代碼:
class Student {
private String name;//學生姓名
private int age;//學生年齡
private String sex;//學生性別
private double score;//學生分數(shù)
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
public class TestDemo {
public static void main(String[] args) {
Student student = new Student();
student.setName("厚積薄發(fā)");
System.out.println(student.getName());
}
}根據(jù)封裝的概念我是不是可以給它封裝成一個公共的接口然后調(diào)用。
好接下來分析一下這個代碼:



所以,我們在成員變量前面加上private修飾使得成員變量只能在類的內(nèi)部訪問,不能在類的外部訪問,然后我們實現(xiàn)了setName getName方法,調(diào)用者兩個接口就可以進行初始化和返回值操作,更好地體現(xiàn)了封裝性。
getter方法和setter方法
為了更方便的調(diào)用這些接口,IDEA會為我們提供了這些接口,我們通常情況下把這些方法叫做getter方法和setter方法。只要我們需要我們就可以調(diào)用這些共有的getter方法和setter方法。
IDEA快捷鍵:Alt + insert

class Student {
private String name;//學生姓名
private int age;//學生年齡
private String sex;//學生性別
private double score;//學生分數(shù)
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public double getScore() {
return score;
}
public void setScore(double score) {
this.score = score;
}
public void sleep() {
System.out.println("我要睡覺了!!!");
}
public void eat() {
System.out.println("我要干飯了?。?!");
}
public void exam() {
System.out.println("我要考試了!??!");
}
}
public class TestDemo {
public static void main(String[] args) {
Student student = new Student();//利用new關鍵字實例化一個對象
student.setName("厚積薄發(fā)");
student.setAge(19);
student.setScore(99.9);
student.setSex("male");
System.out.println(student.getName());
System.out.println(student.getAge());
System.out.println(student.getScore());
System.out.println(student.getSex());
}
}toString方法
此外,我們每個成員變量都要自己實現(xiàn)一遍打印操作,沒錯IDEA編譯器又為我們提供了一個方法,這個方法叫做toString方法,快捷鍵是 Alt +insert然后選擇toString方法。

我們直接打印對象的引用就可以調(diào)用toString方法.
有同學就會問為什么呢?
這就得需要我們看一看println的源碼是怎么實現(xiàn)的了。
我們按住ctrl 點進println這個方法

我們通過源碼就可以發(fā)現(xiàn),println會調(diào)用toString方法,如果定義了toString方法,那他就調(diào)用toString方法,如果沒有調(diào)用他就會打?。?/strong>

eg:

快捷鍵: Alt + insert 選擇constructor

總結:
private關鍵字:利用private修飾的成員變量和方法只能在本類中訪問,如果在外部訪問可以調(diào)用公有的setter方法和getter方法。
封裝的優(yōu)點:減少代碼的耦合性 , 可以自由修改自己的內(nèi)部類,不用修改公有地接口 ,隱藏信息實現(xiàn)細節(jié),更精準的控制成員變量。
要記住并且運用并且調(diào)用這些公共的接口:getter方法和setter方法 還有toString方法以及 構造方法。
本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關注腳本之家的更多內(nèi)容!
相關文章
Java8?CompletableFuture?runAsync學習總結submit()?execute()等
這篇文章主要介紹了Java8?CompletableFuture?runAsync學習總結submit()?execute()等,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-10-10

