繼承的細節

什麼時候使用繼承呢?

當類與類之間存在着所屬關係時,才具備了繼承的前提。a是b中的一種。a繼承b。比如說:狼是犬科中的一種。英文書中,所屬關係時:”is a“。

注意:不要僅僅爲了獲取其他類中的已有成員進行集成。

所以判斷所屬關係,可以簡單看,如果繼承後,被繼承的類中的功能,都可以被該子類所具備,那麼繼承成立。如果不是,不可以繼承

細節二:

在方法覆蓋是,注意兩點:

1:子類覆蓋父類時,必須要保證,子類方法的權限必須大於等於父類方法權限纔可以實現繼承。否則,編譯失敗。

2:覆蓋時,要麼都是靜態,要麼都不靜態。靜態只能覆蓋靜態,或者被靜態覆蓋。

繼承的一個弊端:打破了封裝性。對於一些類,或者類中功能,是需要被繼承或者複寫的。這時如何解決問題呢?介紹一個關鍵字:final:最終。

final特點:

1:這個關鍵字是一個修飾符,可以修飾類,方法,變量。

2::被fianl修飾的類是一個最終類,不可以被繼承。

3:被final修飾的方法是一個最終方法,不可以被覆蓋。

4:被final自ushi的變量是一個常量,只能賦值一次。

其實這樣的原因就是給一些固定的數據起個閱讀性較強的名稱。

不加final修飾不是也可以使用嗎?那麼這個值是一個變量,是可以更改的。加了fianl,程序更爲嚴謹。常量名稱定義時,有規範,所有字母都大寫。如果由多個單詞組成,中間用_連接。

抽象類:abstract

抽象:不具體,看不明白。抽象類表象體現。

在不斷抽取過程中,將共性內容中的方法聲明抽取,但是方法不一樣,沒有抽取,這時抽取到的方法,並不具體,需要被指定關鍵字abstract所標示,聲明爲抽象方法。

抽象方法所在類一定要標示爲抽象類,也就是說該類需要被abstract關鍵字所修飾。

抽象類的特點:

1:抽象方法只能定義在抽象類中,抽象類和抽象方法必須由abstract關鍵字修飾(可以表述類和方法,不可以描述變量)。

2:抽象方法只定義方法聲明,並不定義方法實現。(即沒有大括號)

3:抽象類不可以被創建對象(實例化)。

4:只有通過子類繼承抽象類並覆蓋了抽象類中的所有抽象方法後,該子類纔可以實例化。否則,該子類還是一個抽象類。

抽象類的細節:

1:抽象類中是否有構造函數?有,用於給子類對象進行初始化。

2:抽象類中是否可以定義非抽象方法?

可以。其實,抽象類和一般類沒有太大的區別,都是在描述事物,只不過抽象類在描述事物時,有些功能不具體。所以抽象類和一般類在定義上,都是需要定義屬性和行爲的。只不過,比一般類多了一個抽象函數,而且比一般類少了一個創建對象的部分。

3:抽象關鍵字abstract和哪些不可以共存?final,private,static

4:抽象類中可不可以不定義抽象方法?可以,抽象方法目的僅僅爲了不讓該類創建對象。

模板方法設計模式: 
解決的問題:當功能內部一部分實現時確定,一部分實現是不確定的。這時可以把不確定的部分暴露出去,讓子類去實現。 abstract class GetTime{ 
 public final void getTime(){ //此功能如果不需要複寫,可加final限定   

long start = System.currentTimeMillis(); 
  code(); //不確定的功能部分,提取出來,通過抽象方法實現  

 long end = System.currentTimeMillis(); 
  System.out.println("毫秒是:"+(end-start));  } 
 public abstract void code(); //抽象不確定的功能,讓子類複寫實現 } 
class SubDemo extends GetTime{ 
 public void code(){ //子類複寫功能方法   

for(int y=0; y<1000; y++){    

System.out.println("y"); 

  }

  } }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章