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

Outils d'IA chauds

Undress AI Tool
Images de déshabillage gratuites

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
échangez les visages dans n'importe quelle vidéo sans effort grace à notre outil d'échange de visage AI entièrement gratuit?!

Article chaud

Outils chauds

Bloc-notes++7.3.1
éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)
