java學習筆記-繼承與接口


(一)繼承

什麼情況下用繼承:

當子類和父類出現同樣的函數時,子類函數重寫(覆蓋)父類函數.


覆蓋方法:
1.子類覆蓋父類,必須保證子類權限大於等於父類.
2.靜態只能覆蓋靜態.
重寫和重載
重載:只看同名函數的參數列表.
重寫:方法一摸一樣.
子父類中的構造函數:
構造函數跟着類名走.在對子類對象進行初始化時,父類的構造函數也會進行.那是因爲子類的構造函數默認第一行有一條隱式的語句super(),這個super()會訪問父類中空參數的構造函數,而且子類中的所有構造函數默認第一行都是super()
爲什麼子類一定要訪問父類中的構造函數.
因爲父類中的數據子類可以直接獲取,所以子類對象在建立時,需要先查看父類是如何對這些數據如何初始化的.
所以子類在對象初始化時,要先訪問一下父類中的構造函數.
如果要訪問父類中指定的構造函數,可以通過手動定義super語句的方式指定.


子類調用父類的成員函數和構造函數的方式:
成員函數的調用:super.show()
構造函數的調用:super(name);
super語句必須寫在第一行.
結論:
子類的多有的構造函數,默認都會訪問父類中空參數的構造函數.
因爲子類每一個構造函數內的第一行都有一行隱式的super()
當父類中沒有空參數的構造函數時,子類必須手動通過super形式來指定要訪問父類中的構造函數.
當然,子類的構造函數第一行也可以手動指定this語句來訪問本類中的構造函數,子類中至少會有一個構造函數訪問父類中的構造函數.
父類的構造函數第一行也有一個super語句,父類繼承的是object


關於權限關鍵字和在繼承中的作用

public:在任何處都可以調用
private:只能在本類中調用
protected:子類中或者同一個包內使用。
privat也能被子類繼承 但是 子類無法訪問父類的私有屬性 或 方法 
子類繼承是繼承父類的所有東西  除了構造函數
final:最終,作爲一個修飾符.
1,可以修飾類,函數,變量.
2,被fianl修飾的類不可以被繼承.爲了避免被繼承,被子類複寫功能.
3,被final修飾的方法不能被複寫.
4,被fianal修飾的變量是一個常量只能賦值一次,就可以修飾成員變量,有可以修飾局部變量.
例如:
class A{
  final int x=3;//x的值不能被改變了.
void show(){


  final int y=3;//y的值不能被改變.
}


}
當在描述事物時,一些數據的出現值是固定的,那麼這時爲了增強閱讀性,都給這些值起一個名字.方便於閱讀.
而這個值不需要改變,所以加上final修飾.


抽象類:
當多個類中出現相同功能,但是功能主體不同.

這是可以進行抽取,這時只抽取功能定義,而不抽取功能主體.

抽象類中即能定義抽象方法也能定義非抽象方法

 abstract void sutdy();
抽象類的特點:
1,抽象方法一定在抽象類中
2,抽象方法和抽象類都必須abstract關鍵字修飾.
3,抽象類不可以用new創建對象,因爲調用抽象方法沒意義.抽象方法沒方法體.
4,抽象類中的抽象方法要被類使用,必須由子類複寫起所有的抽象方法後,建立子類對象使用.如果子類只覆蓋了部分抽象方法,那麼該子類還是一個抽象類.
抽象類比一般類多了個抽象函數,抽象類中可以不定義抽象方法,這樣做不讓該類創建對象.
抽象類不可以實例化.




(二)接口


當抽象類中的方法都是抽象的,那麼該類可以通過接口的形式表示.
class用於定義類
interface用於定義接口
實現用implements
接口定義時,格式特點:
1,接口中常見定義:常量,抽象方法.
2,接口中的成員都有固定修飾符.
常量:public static final
方法:public abstract;

接口中的成員都是public 的.
接口:是不可以創建對象的,因爲有抽象方法.
需要被子類實現,子類對接口中的抽象方法全都覆蓋後,子類纔可以實例化.
接口可以被類多實現
//接口可以多繼承
接口只能做方法申明,抽象類中可以做方法申明,也可以做方法實現
 如果在事物之間有共性就用抽象類,特性就用接口
























 






































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