English Deutsch Français Italiano Español Português 繁體中文 Bahasa Indonesia Tiếng Việt ภาษาไทย
所有分類

關於Vector類別,我看書上的範例大致上如下:
//Vector類別
import java.util.*;
//定義一個Water類別
class Water
{
public void sayHello()
{
System.out.println("你好,我是水");
}
}
//定義一個Fish類別
class Fish
{
public void sayHello()
{
System.out.println("你好,我是魚");
}
}
class Demo162
{
public static void main(String[] args)
{
//建構一個容量為2的魚池物件
Vector fishPool = new Vector(2);
//建構魚池中的物件
Water water = new Water();
Fish fish = new Fish();
//將這些物件加入到魚池中
fishPool.add(water);//索引為0
fishPool.add(fish);//索引為1
//取出魚池中的所有物件
//讓它們和大家打個招呼
water = (Water)fishPool.elementAt(0);
water.sayHello();
fish = (Fish)fishPool.elementAt(1);
fish.sayHello();
}
}
我的問題是以下2行是什麼意思,我不太懂。
water = (Water)fishPool.elementAt(0);
fish = (Fish)fishPool.elementAt(1);
因為不加上也是可以的,因為前面有產生類別的物件了。
還有要取得某個位置上的元素可以使用elementAt方法,
該怎麼使用??
請高手幫幫忙!!謝謝!!!

2006-11-30 10:47:18 · 1 個解答 · 發問者 ANDY 2 in 電腦與網際網路 程式設計

我在water = (Water)fishPool.elementAt(0);的下面加了一行
System.out.println(water);
印出一行 Water@1a46e30
這又是什麼阿??!!
好難懂喔!!!

2006-11-30 10:49:01 · update #1

看完你的解說,我想我應該還是有不明白的地方,為了想更了解,所以能不能請你寫個簡單的範例,說明如何利用同樣的父類別傳回不同子類別的物件的簡單程式範例,或是利用我問的程式修改!!

還有一個問題就是 我程式中的water 其實是Object類別 不是Water類別 還是我這樣說是錯的??
有點難懂!!

2006-12-01 17:17:05 · update #2

1 個解答

這個程式涉及到一些基礎觀念首先你必須要知道 Java 的所有類別都一定屬於java.lang.Object 這種類別的子類別這一點乍看之下不怎麼重要但是在物件導向的程式設計中是有特別的妙用的喔妙用是這樣的, 舉例來說, 我們經常會寫一些方法來讓程式模組化例如:public void funA() {...} 這樣不會傳回任何東西public int funB() {...} 這樣會傳回一個整數public float funC() {...} 這樣會傳回一個浮點數public Stack funD() {...} 這樣會傳回一個 Stack 類別的物件你一定會發現到, 不管你怎麼寫, 所有的方法都只能傳回某一種型態int 也好, float 也好, 或是 Stack 類別也好你只能選擇一種作為傳回型態那麼一但你需要用到某個方法能傳回兩種以上的型態, 這個做得到嗎?答案是: 不能直接做得到, 但是能透過 "多型" 技術間接做得到舉例來說, 如果我的程式中有兩種不同類型的資料, 例如:Stack a = new Stack();Queue b = new Queue();當我有時候想傳回 a, 有時候想傳回 b, 這點該怎麼做呢?函數宣告寫成 public Stack example() 的話對於 Queue 行不通要不然寫成 public Queue example() 的話對於 Stack 行不通但是阿其實別忘了這兩個物件的類別都屬於 java.lang.Object 子類別喔也就是說如果你寫成 public Object example() 的話不管是 Stack 類別的 a, 或是 Queue 類別的 b 都是可以傳回的但是傳回的時候並不是 Stack 也不是 Queue 而是 Object用的時候會像這樣 Object c = example();但是這樣我就不能用 Stack 的功能也不能用 Queue 的功能了因為 c 是 Object 類別的假設這一次呼叫的 example 傳回的值是 a那麼你可以利用強制轉型將這個物件從 Object 類別轉換成 Stack 類別這樣就會恢復 Stack 的特性, 也就是能使用 Stack 所提供的屬性及方法用法是這樣的 Stack d = (Stack)c;water = (Water)fishPool.elementAt(0); 就是這個意思你可以去看看 Vector 的 elementAt() 的說明, 會發現傳回了 Object 型態這個技術叫做 "多型", 利用同樣的父類別傳回不同子類別的物件因為每個 Java 的類別都屬於 Object 的子類別所以就是多型技術的常客啦至於 System.out.println(water); 印出怪怪的東西那樣東西是 water 物件的識別碼, 讓虛擬機器能夠識別每個物件的唯一性這樣的答案您滿意嗎?

2006-11-30 16:35:58 · answer #1 · answered by 小璋丸 5 · 0 0

fedest.com, questions and answers