Part 4 : 類、繼承、接口
類
基本結構:
class Person{ private static int[] password;//字段 public String name; void Hello(){//方法 System.out.println("Hello!"); } }
構造方法 :
- 與類名同名,不寫返回類型
- 如無定義,將生成默認構造方法(操作爲空)
- 可重載實現多態
- 可以在一個構造方法中調用另一構造方法,但是需要放在第一句
- 訪問字段 : 實體.字段(類外部) / this.字段 (類方法中)
- 善用setter與getter
- 繼承
- 關鍵字 : extends
- 本質 : E-R關係圖中的is-a關係(說明此子類繼承父類所有方法,字段)
- 可通過對變量重定義進行“隱藏”,也可添加新變量,訪問隱藏字段 -> super.
- 可對同名方法重定義,實現覆蓋(以子類爲準),建議加標記@OverRide,訪問覆蓋方法 -> super.
- 子類可進行強制類型轉換變爲父類
- 包
- 本質 : 解決namespace與命名衝突問題,同一包各個類默認可以互相訪問
- 引入關鍵詞 : import
訪問權限
- 分爲兩類:訪問修飾符,其他修飾符
訪問修飾符:
同一個類中 同一個包中 不同包的子類中 不同包中的非子類 private Yes 默認 Yes Yes protected Yes Yes Yes public Yes Yes Yes Yes (此修飾適用於類/類中成員)
非訪問控制符
基本含義 修飾類 修飾成員 修飾局部變量 Static 靜態,預分配 可以修飾子類 Yes Final 最終的,不可改變 Yes Yes Yes abstract 抽象的,不可實例化 Yes Yes - static
- 類變量可通過類名訪問或實例對象訪問,結果相同(本質:屬於這個類)
如: System.in / System.out
- 一定程度上,可以作爲全局變量表示方式
- 推薦使用類名調用,static方法中不可使用 super / this
- 類變量可通過類名訪問或實例對象訪問,結果相同(本質:屬於這個類)
- final
- 類修飾結果:不可被繼承——不會有子類
- 字段/變量修飾結果:只可賦值一次,不可被修改——只讀量
- static final 可用於表示常量
- abstract
- 類修飾結果:不可被實例化
- 方法修飾:只需聲明,且若類包含abstract方法,則類爲abstract類(子類亦同,直至實現)
- static
接口(interface)
- 抽象:用來描述一個對象的行爲特徵
- 本質:使不相關類,可以有同樣的方法(接口只負責描述)
- 例子:toString()
- 意義:實現了多重繼承
實際上,接口可以作爲一種特殊的類,在泛型操作(<list>)中,可以將接口作爲一種類型,這就使得使用該接口的變量可以向上轉型(又稱向上轉換),這就實現了另一種意義上的“繼承”
(詳參 Java SE Review(4) - Java內部機制 (2) : 向上轉換與向下轉換) - 定義結構:
[public] interface Name[extends SuperInterface]{
[returnType] methodName([paralist]);//方法
Elemtype elem = value;//常量
}
接口中的方法(Method):
- 接口中的方法具有
abstract
和public
屬性 - 可以對父接口方法隱藏,進行重載
- 引用接口的類必須實現引用接口的所有聲明的方法
例:
class FIFOQuene implements Name{
...
public methodName([paralist]){
...
}
...
}
接口對象可以作爲引用,將其他實現接口的實例的對象存儲在其中,通過這些變量可以訪問類實現的接口中的方法,JAVA運行時系統動態確定使用哪個類中的方法
例:
public static void main(String args[]){
...
Name temp = new FIFOQuene();
...
temp.methondname([objlist]);
...
}
Java8以上,可以對接口中定義的方法在接口中實現,稱爲默認方法(關鍵詞
default
),即:提供默認實現- 接口中的常量:
- 接口中不可以存在字段,但可以存在常量,常量被所有引用此接口的類共享,類似於C/C++中的
const
和#define
- 常量具有
public
,static
,final
屬性
- 接口中不可以存在字段,但可以存在常量,常量被所有引用此接口的類共享,類似於C/C++中的
- 接口中的方法具有