java課堂練習7

來源:互聯網
上載者:User

標籤:tin   情境   out   image   文法   建立   value   tcl   構造方法   

動手實驗1:

運行 TestInherits.java 樣本,觀察輸出,注意總結父類與子類之間構造方法的調用關係修改Parent構造方法的代碼,顯式調用GrandParent的另一個建構函式,注意這句調用代碼是否是第一句,影響重大!

1)輸出結果:

 

 

 

2)結論:通過 super 調用基類構造方法,必須是子類構造方法中的第一個語句。

 

動手實驗2:

參看ExplorationJDKSource.java樣本

此樣本中定義了一個類A,它沒有任何成員:

class A { }

樣本直接輸出這個類所建立的對象

public static void main(String[] args)    {

System.out.println(new A());

}

1)輸出結果:

 

 

2)結論:前面樣本中,main方法實際上調用的是:public void println(Object x),這一方面內部調用了String類的valueOf方法。valueOf方法內部又調用Object.toString方法:public String toString() {

return getClass().getName() +"@" + Integer.toHexString(hashCode());

}

hashCode方法是本地方法,由JVM設計者實現:public  native int hashCode();

 

動手實驗3:

我們來看一段代碼(樣本Fruit.java ):

 

 

 

 

 

 

 

注意最後一句,一個字串和一個對象“相加”,得到以下結果:

 

 

 

結論:在“+”運算中,當任何一個對象與一個String對象,串連時,會隱式地調用其toString()方法,預設情況下,此方法返回“類名 @ + hashCode”。為了返回有意義的資訊,子類可以重寫toString()方法。

動手實驗4:物件導向語言為什麼要引入“介面”?

先來看一個現實生活中的執行個體:

鴨子是一種鳥,會遊泳,

同時又是一種食物。

如何使用物件導向的思想,為上述情境建立一個 系統模型(建模)?

什麼叫“建立一個系統模型”?

簡單地說,就是”你打算設計哪些類來“模擬” 鴨子這一現實事物?

因為“鴨子是一種(IS_A)鳥,又是一種(IS_A)食物”,所以我們可以建立三個類,Bird代表鳥,Food代表食物,Duck代表鴨子,讓Duck派生自Bird和Food。

 

這個方案存在的問題:

(1)Java不支援多繼承

(2)“會遊泳”這個方法放在哪個類中?放到Bird中似乎並不合適,因為只有部分鳥類會遊泳。放到Duck中也不好,因為會遊泳的水鳥不止鴨子一種

能否把“會遊泳”、“能被吃”這種特性獨立出來作為一種“可選項”,可以被“附加”到具體對象上?

這樣一來,水鳥可以擁有“會遊泳”這個特性,其它種類的鳥就不具備這個特性,但它可能有其他的特性。

在物件導向世界中,可以使用“介面(interface)”來抽象對象的行為特性。

public interface IFood {

public void Cook();

}

public class Duck  extends Bird implements IFood{

public void Cook()    {

……

}

……

}

Java中“介面”的文法特性

定義一個介面,採用關鍵字interface,實現一個介面,採用關鍵字implements

介面的成員函數自動成為public的,資料成員自動成為

       static和final的。

如果介面不聲明為public的,則自動變為package。

一個類可以同時實現多個介面。

介面的使用:

IFood f = new Duck();

 

介面類型  介面類型的變數=new 實現了介面的具體類型()

可以通過繼承介面來擴充已有介面,並形成一個新的介面。

介面的補充:

      interface OneInterface {

void f1();

}

interface TwoInterface extends OneInterface {

void f2();

}

實現子介面的類,必須實現“父”“子”介面所定義的所有方法,才能被執行個體化(即new出一個對象)。

利用介面定義常量

public interface ArrayBound {

public static final int LOWBOUND=1;

public static final int UPBOUND=100;

}

只要一個類聲明實現了這個介面,就可以直接使用這些常量名

在實際開發中,這種編程方式非常常見。

注意:定義在介面中的常量必須被初始化。

介面與抽象類別的區別:

抽象類別是一個不完全的類,而介面只是表明類應該具有哪些“外部”特徵,不涉及任何實現細節。

介面基本上不具備繼承的任何具體特點,它僅僅承諾了外界能夠調用的方法。

一個類一次可以實現若干個介面,但一個類只能繼承一個父類。

java課堂練習7

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.