Java基礎學習小記--多態,java小記--多態

來源:互聯網
上載者:User

Java基礎學習小記--多態,java小記--多態

題外話:總結了多年的學習心得,不得不說,睡眠是一個學習者的必需品!所謂“早起毀一天”不是沒有道理哪,特別對Coders來說,有幾天不是加班到夜裡。好吧,我承認對於初學Java的我,昨日頭腦頓路,Java的繼承與多態,看得我是有點小懵逼。其實大致是懂了,不過到了具體應用中,特別是比較複雜的繼承和調用關係的時候些許迷路。好了,話不多說,明日再把繼承和多態來個總結,今日先對多態來個小記。

-------------------------------------------------------------------------------------------------------------------

現在我們要做這麼一個媒體庫,用來存放CD和DVD。可以往媒體庫裡添加CD和DVD,還可以列出來媒體庫裡所有的CD和DVD。

我們用到了繼承的概念:CD是一個對象,DVD也是。兩者又有很多相似的地方,比方說都有名字,播放時間,評論,等等,為了以後便於管理和調試,我們做了一個父類叫Item,它下面有兩個子類:CD,DVD。

然後我們還需要做一個類(對象)來管理它們,這個對象有一個ArrayList的成員變數當作媒體庫,有一個add函數用來添加CD或DVD,還得有個list函數用來列出媒體庫裡的所有東西。我們給這個類起名Database。

這樣我們就要做以下四個java源檔案:

源碼:

1 package dome; 2 3 import java.util.ArrayList; 4 5 public class Database { 6 7 private ArrayList<Item> listItem = new ArrayList<Item>(); 8 9 public void add(Item item) {10 listItem.add(item);11 }12 13 public void list() {14 for(Item item:listItem) {15 item.print();16 }17 }18 19 public static void main(String[] args) {20 Database db = new Database();21 db.add(new CD("黑夢",600,true,"Classic Album","竇唯",10));22 db.add(new DVD("功夫",900,false,"Let's do this!","周星馳"));23 db.add(new CD("Wall",700,false,"Psychedelic Rock","PinkFloyd",15));24 db.list();25 }26 27 }Database.java 1 package dome; 2 3 public class Item { 4 5 private String title; 6 private int playTime; 7 private boolean gotIt = false; 8 private String comment; 9 10 public Item(String title, int playTime, boolean gotIt, String comment) {11 super();12 this.title = title;13 this.playTime = playTime;14 this.gotIt = gotIt;15 this.comment = comment;16 }17 18 public void print() {19 System.out.print(title+":"+playTime+":"+gotIt+":"+comment);20 }21 22 }Item.java 1 package dome; 2 3 public class CD extends Item { 4 5 private String artist; 6 private int numofTracks; 7 8 public CD(String title, int playTime, boolean gotIt, String comment, String artist, int numofTracks) { 9 super(title, playTime, gotIt, comment);10 this.artist = artist;11 this.numofTracks = numofTracks;12 }13 14 public void print() {15 System.out.print("CD:");16 super.print();17 System.out.println(":"+artist+":"+numofTracks);18 }19 20 }CD.java 1 package dome; 2 3 public class DVD extends Item { 4 5 private String director; 6 7 public DVD(String title, int playTime, boolean gotIt, String comment, String director) { 8 super(title, playTime, gotIt, comment); 9 this.director = director;10 }11 12 public void print() {13 System.out.print("DVD:");14 super.print();15 System.out.println(":"+director);16 }17 18 } DVD.java

運行:

這裡有兩個概念:

多態變數:在這裡可以說是,一個父類下面有兩個子類,在Database裡第9行:Item item,定義了一個物件變數item,這個item是Item類,這個item還只是一個變數,是一個對象的管理者,但還沒有具體要去管的那個對象。在main函數裡可以去給item賦一個CD,也可以給他賦DVD,所以這個item變數是要根據程式啟動並執行時候才能知道他要管理的那個對象是什麼。這個item就是多態變數。

向上造型:想上造型是指拿一個子類的對象給父類的物件變數,或者說拿一個子類的對象當父類的對象來用,如Database裡db.add一樣,我們可以拿一個CD或DVD給item這個Item類物件變數。向上造型總是安全的。

-------------------------------------------------------------------------------------------------------------------

然後是多態:

在Database啟動並執行過程中,第15行,有句item.print

我們可以看到這是在調用Item裡的print函數,不過我們從程式運行結果來看彷彿不是這麼回事,運行結果顯示明明是調用CD.print();和DVD.print();的結果。

Item.print():

CD.print():

DVD.print():

 

這就要用多態去解釋:首先當子類和父類裡有相同名稱的函數時,子類裡的函數會去覆蓋(override)從父類那裡繼承來的那個同名函數,於是從父類來的那個函數就會隱藏起來不起作用。然後Database第15行裡的item會去看它管理的是什麼它自己的Item類還是他的子類,如果是它的子類,那麼這個print函數就會用它子類那裡的print函數。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.