Java FAQ(5)

來源:互聯網
上載者:User

五、 物件導向篇

Q5.1  extends和implements有什麼不同?
答:對於class而言,extends用於(單)繼承一個類(class),而implements用於實現一個介面(interface)。interface的引入是為了部分地提供多繼承的功能。在interface中只需聲明方法頭,而將方法體留給實現的class來做。這些實現的class的執行個體完全可以當作interface的執行個體來對待。在interface之間也可以聲明為extends(多繼承)的關係。注意一個interface可以extends多個其他interface。

Q5.2  java怎麼實現多繼承?

答:java不支援顯式的多繼承。因為在顯式多繼承的語言例如c++中,會出現子類被迫聲明祖先虛基類建構函式的問題,而這是違反物件導向的封裝性原則的。java提供了interface和implements關鍵字來部分地實現多繼承。參見Q5.1。

Q5.3 abstract是什嗎?

答:被聲明為abstract的方法無需給出方法體,留給子類來實現。而如果一個類中有abstract方法,那麼這個類也必須聲明為abstract。
被聲明為abstract的類無法執行個體化,儘管它可以定義構造方法供子類使用。

Q5.4 public,protected,private有什麼不同?

答:這些關鍵字用於聲明類和成員的可見度。public成員可以被任何類訪問,protected成員限於自己和子類訪問,private成員限於自己訪問。Java還提供了第四種的預設可見度,一般稱為package private,當沒有任何public,protected,private修飾符時,成員是同一包內可見。類可以用public或預設來修飾。

Q5.5 Override和Overload有什麼不同?
答:Override是指父類和子類之間方法的繼承關係,這些方法有著相同的名稱和參數類型。Overload是指同一個類中不同方法(可以在子類也可以在父類中定義)間的關係,這些方法有著相同的名稱和不同的參數類型。

Q5.6 我繼承了一個方法,但現在我想調用在父類中定義的方法。

答:用super.xxx()可以在子類中調用父類方法。

Q5.7 我想在子類的構造方法中調用父類的構造方法,該怎麼辦?

答:在子類構造方法的第一行調用super(...)即可。

Q5.8 我在同一個類中定義了好幾個構造方法並且想在一個構造方法中調用另一個。

答:在構造方法第一行調用this(...)。

Q5.9 我沒有定義構造方法會怎麼樣?

答:自動獲得一個無參數的構造方法。

Q5.10 我調用無參數的構造方法失敗了。

答:如果你至少定義了一個構造方法,就不再有自動提供的無參數的構造方法了。你需要另外顯式定義一個無參數的構造方法。另外一種可能是你的構造方法或者類不是public的,參見Q5.4瞭解java中的可見度。

Q5.11 我該怎麼定義類似於C++中的析構方法(destructor)?

答:提供一個void finalize()方法。在Garbarge Collector回收該對象時會調用該方法。

注意實際上你很難判斷一個對象會在什麼時候被回收。作者從未感到需要用到該方法。

Q5.12 我想將一個父類對象轉換成一個子類對象該怎麼做?
答:強制類型轉換。如
public void meth(A a)
{
    B b = (B)a;
}
如果a實際上並不是B的執行個體,會拋出ClassCastException。所以請確保a確實是B的執行個體。

Q5.13 其實我不確定a是不是B的執行個體,能不能分情況處理?
答:可以使用instanceof操作符。例如
if( a instanceof B )
{
    B b = (B)a;
}
else
{
    ...
}

Q5.14 我在方法裡修改了一個對象的值,但是退出方法後我發現這個對象的值沒變!
答:很可能你把傳入參數重賦了一個新對象,例如下列代碼就會造成這種錯誤:public void fun1(A a) //a是局部參數,指向了一個外在對象。
{
    a = new A(); //a指向了一個新對象,和外在對象脫鉤了。如果你要讓a作為
傳出變數,
不要寫這一句。
        a.setAttr(attr);//修改了新對象的值,外在對象沒有被修改。
}
基本類型也會出現這種情況。例如:
public void fun2(int a)
{
    a = 10;//只作用於本方法,外面的變數不會變化。
}

 

 

From: http://www.cndw.com/tech/page/200602154467.asp

聯繫我們

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