現(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è)父類叫Item,它下面有兩個(gè)子類:CD,DVD。
然后我們還需要做一個(gè)類(對(duì)象)來(lái)管理它們,這個(gè)對(duì)象有一個(gè)ArrayList的成員變量當(dāng)作媒體庫(kù),有一個(gè)add函數(shù)用來(lái)添加CD或DVD,還得有個(gè)list函數(shù)用來(lái)列出媒體庫(kù)里的所有東西。我們給這個(gè)類起名Database。
這樣我們就要做以下四個(gè)java源文件:
源碼:
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)行:
這里有兩個(gè)概念:
多態(tài)變量:在這里可以說(shuō)是,一個(gè)父類下面有兩個(gè)子類,在Database里第9行:Item item,定義了一個(gè)對(duì)象變量item,這個(gè)item是Item類,這個(gè)item還只是一個(gè)變量,是一個(gè)對(duì)象的管理者,但還沒(méi)有具體要去管的那個(gè)對(duì)象。在main函數(shù)里可以去給item賦一個(gè)CD,也可以給他賦DVD,所以這個(gè)item變量是要根據(jù)程序運(yùn)行的時(shí)候才能知道他要管理的那個(gè)對(duì)象是什么。這個(gè)item就是多態(tài)變量。
向上造型:想上造型是指拿一個(gè)子類的對(duì)象給父類的對(duì)象變量,或者說(shuō)拿一個(gè)子類的對(duì)象當(dāng)父類的對(duì)象來(lái)用,如Database里db.add一樣,我們可以拿一個(gè)CD或DVD給item這個(gè)Item類對(duì)象變量。向上造型總是安全的。
-------------------------------------------------------------------------------------------------------------------
然后是多態(tài):
在Database運(yùn)行的過(guò)程中,第15行,有句item.print
我們可以看到這是在調(diào)用Item里的print函數(shù),不過(guò)我們從程序運(yùn)行結(jié)果來(lái)看仿佛不是這么回事,運(yùn)行結(jié)果顯示明明是調(diào)用CD.print();和DVD.print();的結(jié)果。
Item.print():
CD.print():
DVD.print():
這就要用多態(tài)去解釋:首先當(dāng)子類和父類里有相同名稱的函數(shù)時(shí),子類里的函數(shù)會(huì)去覆蓋(override)從父類那里繼承來(lái)的那個(gè)同名函數(shù),于是從父類來(lái)的那個(gè)函數(shù)就會(huì)隱藏起來(lái)不起作用。然后Database第15行里的item會(huì)去看它管理的是什么它自己的Item類還是他的子類,如果是它的子類,那么這個(gè)print函數(shù)就會(huì)用它子類那里的print函數(shù)。

Alat AI Hot

Undress AI Tool
Gambar buka pakaian secara percuma

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)
