1: package package1;
2:
3: import package1.package2.*;
4:
5: public class Test_Object_1 {
6:
7: public static void main(String[] args) {
8: // TODO Auto-generated method stub
9:
10: // Test_Object_2 to2 = new Test_Object_2(); 不可建立抽象類別的實體物件
11:
12: OverTO2 to1 = new OverTO2();//多型, 宣告類別(OverTO2)要大於等於實體類別(OverTO2)
13:
14: Test_Object_2 to2 = new OverTO3();//多型, 宣告類別(Test_Object_2)要大於等於實體類別(OverTO3)
15:
16: OverTO2 to3 = new OverTO3();//多型, 宣告類別(OverTO2)要大於等於實體類別(OverTO3)
17:
18: //OverTO3 to4 = new OverTO2();錯誤, 宣告類別(OverTO3)要大於等於實體類別(OverTO2)
19:
20: //轉型, to1的實體類別為new OverTO2(), 欲轉型為Test_Object_2 是可行的,因為 OverTO2 is-a Test_Object_2
21: ((Test_Object_2)to1).getif2Num();
22:
23: //轉型, to3的實體類別為new OverTO3(), 欲轉型為Test_Object_2也 是可行的,因為 OverTO3 is-a Test_Object_2
24: ((Test_Object_2)to3).show();
25:
26: //執行錯誤,因為to1的實體類別為new OverTO2(), 欲轉型為OverTO3 是不行的,因為 OverTO2 is not a OverTO3
27: //((OverTO3)to1).show();
28:
29: //轉型前也可以用 instanceof 檢查, A instanceof B 回傳 true 代表 A is-a B
30: System.out.println(to3 instanceof OverTO2);//true
31: System.out.println(to1 instanceof OverTO3);//false
32:
33: }
34:
35: }
36:
37: class OverTO2 extends Test_Object_2//類別單一繼承類別 ,繼承抽象類別Test_Object_2
38: {
39:
40: public void show()//覆寫 Test_Object_2 的 show 方法
41: {
42:
43: }
44:
45: public int getifNum1()//覆寫interface1 的 getifNum1 方法
46: {
47: return if1Num1;
48: }
49:
50: public int getifNum2()//覆寫interface1 的getifNum2方法
51: {
52: return if1Num2;
53: }
54:
55: public int getif2Num()//覆寫interface2的getif2Num方法
56: {
57: return if2Num;
58: }
59:
60: public int getif3Num()//覆寫interface2的getif2Num方法
61: {
62: return if3Num;
63: }
64: }
65:
66: class OverTO3 extends OverTO2
67: {
68:
69: }
1: package package1.package2;
2:
3: public abstract class Test_Object_2 implements interface1,interface2 //類別多重實作介面
4: {
5: private int pNum1;//private 屬性,無法直接存取
6:
7: public int getpNum1()//一般方法,取得pNum1
8: {
9: return pNum1;
10: }
11:
12: abstract public void show();//抽象方法,繼承 Test_Object_2 的類別必須改寫此方法
13:
14: //final abstract show(); abstract 不可與 final 連用
15: //private abstract show(); abstract 不可與 private 連用
16: }
17:
18:
19: interface interface1 extends interface2,interface3 //介面多重繼承介面
20: {
21: int if1Num1 =0;//屬性 省略 public final
22: public final int if1Num2 =0;//不省略也行
23:
24: int getifNum1();//方法省略 public abstract,以及內容
25: public abstract int getifNum2();//不省略也行
26: }
27:
28: interface interface2
29: {
30: int if2Num = 1;
31: int getif2Num();
32: }
33:
34: interface interface3 extends interface2
35: {
36: int if3Num =2;
37: int getif3Num();
38: }