現(xiàn)在我們要做這麼一個(gè)媒體庫(kù),用來(lái)存放CD和DVD??梢栽诿襟w庫(kù)裡加入CD和DVD,還可以列出來(lái)媒體庫(kù)裡所有的CD和DVD。
我們用到了繼承的概念:CD是一個(gè)對(duì)象,DVD也是。兩者又有很多相似的地方,比方說(shuō)都有名字,播放時(shí)間,評(píng)論,等等,為了以後便於管理和調(diào)試,我們做了一個(gè)父類(lèi)叫Item,它下面有兩個(gè)子類(lèi):CD,DVD。
然後我們還需要做一個(gè)類(lèi)別(物件)來(lái)管理它們,這個(gè)物件有一個(gè)ArrayList的成員變數(shù)當(dāng)作媒體庫(kù),有一個(gè)add函數(shù)用來(lái)添加CD或DVD,還得有個(gè)list函數(shù)用來(lái)列出媒體庫(kù)裡的所有東西。我們給這個(gè)類(lèi)別取名為Database。
這樣我們就要做以下四個(gè)java來(lái)源檔:
源碼:
package dome; import java.util.ArrayList; public class Database { private ArrayList<Item> listItem = new ArrayList<Item>(); public void add(Item item) { listItem.add(item); } public void list() { for(Item item:listItem) { item.print(); } } public static void main(String[] args) { Database db = new Database(); db.add(new CD("黑夢(mèng)",600,true,"Classic Album","竇唯",10)); db.add(new DVD("功夫",900,false,"Let's do this!","周星馳")); db.add(new CD("Wall",700,false,"Psychedelic Rock","PinkFloyd",15)); db.list(); } } Database.java
package dome; public class Item { private String title; private int playTime; private boolean gotIt = false; private String comment; public Item(String title, int playTime, boolean gotIt, String comment) { super(); this.title = title; this.playTime = playTime; this.gotIt = gotIt; this.comment = comment; } public void print() { System.out.print(title+":"+playTime+":"+gotIt+":"+comment); } } Item.java
package dome; public class CD extends Item { private String artist; private int numofTracks; public CD(String title, int playTime, boolean gotIt, String comment, String artist, int numofTracks) { super(title, playTime, gotIt, comment); this.artist = artist; this.numofTracks = numofTracks; } public void print() { System.out.print("CD:"); super.print(); System.out.println(":"+artist+":"+numofTracks); } } CD.java
package dome; public class DVD extends Item { private String director; public DVD(String title, int playTime, boolean gotIt, String comment, String director) { super(title, playTime, gotIt, comment); this.director = director; } public void print() { System.out.print("DVD:"); super.print(); System.out.println(":"+director); } } DVD.java
運(yùn)行:
父類(lèi)別下面有兩個(gè)子類(lèi),在Database裡第9行:Item item,定義了一個(gè)物件變數(shù)item,這個(gè)item是Item類(lèi),這個(gè)item還只是一個(gè)變量,是一個(gè)物件的管理者,但還沒(méi)有具體要去管的那個(gè)對(duì)象。在main函數(shù)裡可以去幫item賦一個(gè)CD,也可以幫他賦DVD,所以這個(gè)item變數(shù)是要依照程式運(yùn)行的時(shí)候才能知道他要管理的那個(gè)物件是什麼。這個(gè)item就是多態(tài)變數(shù)。
向上造型:想上造型是指拿一個(gè)子類(lèi)別的物件給父類(lèi)別的物件變量,或者說(shuō)拿一個(gè)子類(lèi)別的物件當(dāng)父類(lèi)別的物件來(lái)用,如Database裡db.add一樣,我們可以拿一個(gè)CD或DVD給item這個(gè)Item類(lèi)別物件變數(shù)。向上造型總是安全的。
------------------------------------------------ -------------------------------------------------- -----------------
接著是多態(tài):
在Database運(yùn)作的過(guò)程中,第15行,有句item.print
我們可以看到這是在呼叫Item裡的print函數(shù),不過(guò)我們從程式運(yùn)行結(jié)果來(lái)看彷彿不是這麼回事,運(yùn)行結(jié)果顯示明明是呼叫CD.print();和DVD.print();的結(jié)果。
Item.print():
CD.print():
DVD.print():
DVD.print():
當(dāng)類(lèi)別裡有相同名稱(chēng)的函數(shù)時(shí),子類(lèi)別裡的函數(shù)會(huì)去覆蓋(override)從父類(lèi)別繼承來(lái)的那個(gè)同名函數(shù),所以從父類(lèi)別來(lái)的那個(gè)函數(shù)就會(huì)隱藏起來(lái)不起作用。然後Database第15行裡的item會(huì)去看它管理的是什麼它自己的Item類(lèi)別還是他的子類(lèi),如果是它的子類(lèi),那麼這個(gè)print函數(shù)就會(huì)用它子類(lèi)別那裡的print函數(shù)。

熱AI工具

Undress AI Tool
免費(fèi)脫衣圖片

Undresser.AI Undress
人工智慧驅(qū)動(dòng)的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線(xiàn)上人工智慧工具。

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門(mén)文章

熱工具

記事本++7.3.1
好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強(qiáng)大的PHP整合開(kāi)發(fā)環(huán)境

Dreamweaver CS6
視覺(jué)化網(wǎng)頁(yè)開(kāi)發(fā)工具

SublimeText3 Mac版
神級(jí)程式碼編輯軟體(SublimeText3)
