現(xiàn)在我們要做這么一個媒體庫,用來存放CD和DVD。可以往媒體庫里添加CD和DVD,還可以列出來媒體庫里所有的CD和DVD。
我們用到了繼承的概念:CD是一個對象,DVD也是。兩者又有很多相似的地方,比方說都有名字,播放時間,評論,等等,為了以后便于管理和調(diào)試,我們做了一個父類叫Item,它下面有兩個子類:CD,DVD。
然后我們還需要做一個類(對象)來管理它們,這個對象有一個ArrayList的成員變量當作媒體庫,有一個add函數(shù)用來添加CD或DVD,還得有個list函數(shù)用來列出媒體庫里的所有東西。我們給這個類起名Database。
這樣我們就要做以下四個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("黑夢",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
運行:
這里有兩個概念:
多態(tài)變量:在這里可以說是,一個父類下面有兩個子類,在Database里第9行:Item item,定義了一個對象變量item,這個item是Item類,這個item還只是一個變量,是一個對象的管理者,但還沒有具體要去管的那個對象。在main函數(shù)里可以去給item賦一個CD,也可以給他賦DVD,所以這個item變量是要根據(jù)程序運行的時候才能知道他要管理的那個對象是什么。這個item就是多態(tài)變量。
向上造型:想上造型是指拿一個子類的對象給父類的對象變量,或者說拿一個子類的對象當父類的對象來用,如Database里db.add一樣,我們可以拿一個CD或DVD給item這個Item類對象變量。向上造型總是安全的。
-------------------------------------------------------------------------------------------------------------------
然后是多態(tài):
在Database運行的過程中,第15行,有句item.print
我們可以看到這是在調(diào)用Item里的print函數(shù),不過我們從程序運行結(jié)果來看仿佛不是這么回事,運行結(jié)果顯示明明是調(diào)用CD.print();和DVD.print();的結(jié)果。
Item.print():
CD.print():
DVD.print():
這就要用多態(tài)去解釋:首先當子類和父類里有相同名稱的函數(shù)時,子類里的函數(shù)會去覆蓋(override)從父類那里繼承來的那個同名函數(shù),于是從父類來的那個函數(shù)就會隱藏起來不起作用。然后Database第15行里的item會去看它管理的是什么它自己的Item類還是他的子類,如果是它的子類,那么這個print函數(shù)就會用它子類那里的print函數(shù)。

熱AI工具

Undress AI Tool
免費脫衣服圖片

Undresser.AI Undress
人工智能驅(qū)動的應用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover
用于從照片中去除衣服的在線人工智能工具。

Clothoff.io
AI脫衣機

Video Face Swap
使用我們完全免費的人工智能換臉工具輕松在任何視頻中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的代碼編輯器

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

禪工作室 13.0.1
功能強大的PHP集成開發(fā)環(huán)境

Dreamweaver CS6
視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版
神級代碼編輯軟件(SublimeText3)