首頁 >类库下载 >java类库 >Java基礎學習

Java基礎學習

高洛峰
高洛峰原創
2016-10-09 16:50:562068瀏覽

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

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

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

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

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&#39;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

運行:

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

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

Item.print():

Java基礎學習CD.print():

Java基礎學習DVD.print():

Java基礎學習DVD.print():

Java基礎學習當類別裡有相同名稱的函數時,子類別裡的函數會去覆蓋(override)從父類別繼承來的那個同名函數,所以從父類別來的那個函數就會隱藏起來不起作用。然後Database第15行裡的item會去看它管理的是什麼它自己的Item類別還是他的子類,如果是它的子類,那麼這個print函數就會用它子類別那裡的print函數。

🎜🎜🎜
陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn