我要學會Java (二):物件導向其實很簡單 - Noob's Space
文章推薦指數: 80 %
類別方法撰寫的方式和一般的方法基本上一樣,只是呼叫的時候,不需要建立物件就可以呼叫了。
把上面的範例加上建構子和類別方法大概是這樣: class ...
物件導向的三大特型:封裝、繼承、多型。
不過或許我們應該先來講類別和物件的關係。
在物件導向的世界裡,很多東西都是由一個一個物件構成的。
舉凡一些感覺很「具體」的東西都可以是物件,例如房子、XperiaZ5、杯子、橡皮擦、哈士奇、Noob……等等,而類別通常是一些比較籠統的東西,例如車、人、飛機之類的。
雖然也沒有規定那些東西一定是物件或類別,不過通常我們會在類別裡定義它的特性,並透過這個類別來建立一個物件。
類別
類別比較算是一個範本,裡面定義好該有的屬性和方法,其中方法又大概可以分為一般的方法、類別方法和建構子。
例如我們可以定義一個學生類別,裏面包含了name、score屬性,以及getName()方法、setScore()方法。
物件
物件則是實體的東西,由定義好的類別來建立一個物件。
例如Peter是一個學生、Amy是一個學生。
那麼Peter就會擁有Student類別的屬性和方法,所以Peter會有name、score屬性、getName()、setScore()方法,Amy也會有自己的name、score屬性、getName()、setScore()方法。
來寫個範例:
classStudent{
publicStringname;
publicintscore;
publicvoidgetName(){
returnname;
}
publicvoidsetScore(ints){
score=s;
}
}
publicclassclass_test{
publicstaticvoidmain(String[]agrs){
StudentPeter=newStudent();
Peter.setName("Peter");
Peter.score=88;
StudentAmy=newStudent();
Amy.setName("Amy");
Amy.score=85;
}
}
不過,建立一個物件後,就得手動給屬性,還是有點麻煩。
在類別裡面放建構子,就可以在建立物件的時候,把所有屬性一次給完。
建構子的寫法大概是這樣:
Student(Stringn,ints){
name=n;score=s;
}
值得注意的是,建構子前面不得加任何修飾,而且名字要和類別名稱一模一樣。
最後要講的是類別方法,類別方法又稱靜態方法,所以宣告方法的時候加一個static就可以了。
類別方法撰寫的方式和一般的方法基本上一樣,只是呼叫的時候,不需要建立物件就可以呼叫了。
把上面的範例加上建構子和類別方法大概是這樣:
classStudent{
publicStringname;
publicintscore;
Student(Stringn,ints){
name=n;
score=s;
}
publicvoidgetName(){
returnname;
}
publicvoidsetScore(ints){
score=s;
}
publicstaticvoidhelloWorld(){
System.out.println("Hello,World!");
}
}
publicclassclass_test{
publicstaticvoidmain(String[]agrs){
StudentPeter=newStudent("Peter",88);
StudentAmy=newStudent("Amy",85);
Student.hellowWorld();
}
}
這樣就是最基本的類別和物件之間的關係了。
物件導向的封裝性
封裝(Encapsulation),簡單來說就是抽象(Abstract)的概念。
對一件事情只需要理解他的外在就好,不需要了解裡面內部的構造。
就像我們只要知道看電視的時候該怎麼轉台、調音量,並不需要知道裡面有多少電線和構造。
而我們在寫類別的時候,把類別定義完,之後要寫物件就只要指定屬性和方法就好,並不需要知道方法是怎麼實作的。
這也是一種封裝性。
物件導向的繼承性
繼承(Inheritance),要設計一張和原有設計很像的設計圖,可以拿原本的設計圖當底開始畫。
這樣就不需要把相同的東西再宣告一次。
比方說一個經典的例子,如果有一個Car類別:
classCar{
publicStringplate;
publicStringbrand;
publicStringcolor;
}
記載了車牌、廠牌、顏色三個屬性。
如果要多新增一個Taxi類別,可以直接繼承Car屬性來用:
classTaxiextendsCar{
publicStringplate;
publicStringbrand;
publicStringcolor;
publicStringdriver;
}
這就是經典的計程車繼承車XD。
物件導向的多型性
多型(Polymorphism),簡單來說就是同名的方法。
多個相同名稱的方法,傳入不同的參數,會執行不同的敘述。
比方說,一個計算面積的方法,如果傳入一個參數,就當正方形來算面積;傳入兩個參數,就當成長方形來算面積。
publicintcomputeArea(intlength){
returnlength*length;
}
publicintcomputeArea(intlength,intwidth){
returnlength*width;
}
其實多型包含多載(Overloading)和複寫(Overriding),不過暫時知道多載就好了。
以上就是物件導向的三個特性,不過,物件導向協助我們解決了什麼樣的問題?以下引用Ruby使用手冊:
物件導向程式設計能夠將單調而重複的邏輯工作委派予資料,把我們對資料的概念從被動轉為主動。
換而言之,
資料不再是一個開蓋盒子,只能讓我們自己去找東西或放東西進去。
資料變成是能夠運作的機器,具有標示明確的開關與功能。
上述的「機器」內部可能非常複雜,也可能非常簡單,並不能單以外部作出判斷,我們不會隨意拆開機器(除非我們非常確定設計出現問題),所以我們只需要按按開關,了解有甚麼功能可以與資料互動。
機器做好後,我們就不會再去想它是如何運作了。
好啦Java筆記暫時整理到這邊,大概也沒時間補充了QQ。
我要學會Java目錄
我要學會Java(一):Java基本介紹
我要學會Java(二):物件導向其實很簡單
我們正降低廣告比例以提升閱讀體驗。
如果你喜歡這篇文章,不妨按下Like按鈕或分享到社群,以行動支持我寫更多文章。
當然,你也可以
點此用新臺幣支持我,或
點此透過BTC、ETH、USDC等加密貨幣支持我。
分享到:
也想架個不錯的部落格,寫些不錯的文章嗎?
本站熱門文章:
如何拍下螢幕畫面?截圖別再截全螢幕了!
API實作(一):規劃RESTfulAPI要注意什麼
一補數與二補數
ufw:簡易防火牆設置
常見的五個開源專案授權條款,使用軟體更自由
技術好康:
免費100USD額度|DigitalOcean:俗擱大碗的VPS空間,是時候該做點更進階的事了?
只要一折,5USD用5年|IvacyVPN
HostedonDigitalOcean
身為一個工程師,就是一天到晚在看不同的程式語言、不同的環境,偶爾這個專案用這個語言、那個專案用那個套件,常常會需要上網查該怎麼做才好。
這次介紹的cheatsheet,讓你可以不用離開terminal就查到想找的說明。
MovaviVideoConverter支援180種影片格式,有Windows和Mac兩種版本,除了簡單的影片轉檔外,這軟體也支援外掛字幕到影片中,更支援AI無損放大功能!
TDX運輸資料流通服務平臺,是交通部為落實智慧運輸政策而制定的資料整合服務平臺。
平臺上可以取得「公共運輸整合資訊」,包含公車、火車、自行車等等資訊,也可以取得「即時路況與停車資訊」,例如高速公路路況、高速公路看板上的資訊、各縣市停車場剩餘車位數等等。
TDX平臺也提供了路段編碼、圖資定位等服務,例如輸入經緯度得到這個地點的路名、輸入地址取得經緯度服務等等,基本上所有跟交通有關的API服務都整合起來了。
延伸文章資訊
- 1定義類別(Class) | Java SE 6 技術手冊 - caterpillar
在Java 中使用"class" 關鍵字來定義類別,使用類別來定義一個物件(Object)時,會考慮這個物件可能擁有的「屬性」(Property)與「方法」(Method)。
- 2Inner Class)、自訂資料型態@ Penguin 工作室,一起JAVA吧!
事實上我們撰寫的JAVA程式都是包含在一個類別(Class)裡面的,像是先前我們所建立的public class HelloWorld { }就是一個類別,在類別中我們可以宣告變數、方法等, ...
- 3類別(Class)-基礎- Java學習筆記
類別(Class)可說是建立物件的一個藍圖,是一個使用者自行定義的資料型態。 ... 由以上範例可知class有如一個分類,該分類定義了各種特徵、行為、運作方式, 藉由表示某物是 ...
- 4定義類別 - Java 學習系列
class 類別名稱. {. 資料型態field 名稱; ; public class class01 {. . public static void main(String[] args) ...
- 5類別函數 - Java 學習系列
類別變數:物件共享,佔用在同一個記憶體. 類別函數:可以直接呼叫. 類別函數的定義方式也是相同的:. 加上static 就可以定義為類別函數.