单根结构
在面向對象的程序設計中,由于C++的引入而顯得尤為突出的一個問題是:所有類最終是否都應從單獨一個 基礎類繼承。在Java 中(與其他幾乎所有OOP語言一樣),對這個問題的答案都是肯定的,而且這個終級基 礎類的名字很簡單,就是一個“Object”。這種“單根結構”具有許多方面的優點。 單根結構中的所有對象都有一個通用接口,所以它們最終都屬于相同的類型。另一種方案(就象 C++那樣) 是我們不能保證所有東西都屬于相同的基本類型。從向后兼容的角度看,這一方案可與C 模型更好地配合, 而且可以認為它的限制更少一些。但假期我們想進行純粹的面向對象編程,那么必須構建自己的結構,以期 獲得與內建到其他 OOP 語言里的同樣的便利。需添加我們要用到的各種新類庫,還要使用另一些不兼容的接 口。理所當然地,這也需要付出額外的精力使新接口與自己的設計方案配合(可能還需要多重繼承)。為得 到C++額外的“靈活性”,付出這樣的代價值得嗎?當然,如果真的需要——如果早已是 C 專家,如果對C 有難舍的情結——那么就真的很值得。但假如你是一名新手,首次接觸這類設計,象Java 那樣的替換方案也 許會更省事一些。 單根結構中的所有對象(比如所有 Java 對象)都可以保證擁有一些特定的功能。在自己的系統中,我們知道 對每個對象都能進行一些基本操作。一個單根結構,加上所有對象都在內存堆中創建,可以極大簡化參數的 傳遞(這在 C++里是一個復雜的概念)。 利用單根結構,我們可以更方便地實現一個垃圾收集器。與此有關的必要支持可安裝于基礎類中,而垃圾收 集器可將適當的消息發給系統內的任何對象。如果沒有這種單根結構,而且系統通過一個句柄來操縱對象, 那么實現垃圾收集器的途徑會有很大的不同,而且會面臨許多障礙。 由于運行期的類型信息肯定存在于所有對象中,所以永遠不會遇到判斷不出一個對象的類型的情況。這對系
35
統級的操作來說顯得特別重要,比如違例控制;而且也能在程序設計時獲得更大的靈活性。 但大家也可能產生疑問,既然你把好處說得這么天花亂墜,為什么C++沒有采用單根結構呢?事實上,這是 早期在效率與控制上權衡的一種結果。單根結構會帶來程序設計上的一些限制。而且更重要的是,它加大了 新程序與原有C 代碼兼容的難度。盡管這些限制僅在特定的場合會真的造成問題,但為了獲得最大的靈活程 度,C++最終決定放棄采用單根結構這一做法。而 Java 不存在上述的問題,它是全新設計的一種語言,不必 與現有的語言保持所謂的“向后兼容”。所以很自然地,與其他大多數面向對象的程序設計語言一樣,單根 結構在 Java 的設計方案中很快就落實下來。
1 package Com.TomTest;
2
3
4 abstract class As {
5 abstract int min(int x,int y);
6 int max(int x,int y) {
7 return x>y?x:y;
8 }
9 }
10 class B extends As {
11 int min(int x,int y) {
12 return x<y?x:y;
13 }
14 }
15 public class TomTest_28 {
16 public static void main(String args[]) {
17 As a;
18 B b=new B();
19 int max=b.max(12,34);
20 int min=b.min(12,34);
21 System.out.println("max="+max+" min="+min);
22 a=b;
23 max=a.max(12,34);
24 System.out.println("max="+max);
25 }
26 }
總結
- 上一篇: 魅族mx5什么时候上市及配置详细介绍
- 下一篇: iOS 10公测版锁屏直接回复信息怎么解