JAVA面向對象的多態性及抽象類和接口
Object類是所有Java類的根基類(“祖先類”)
如果在類的聲明中未使用extends關鍵字指明其基類,則默認基類為Object類
1.toString()方法
Object類中定義有public String toString()方法,其返回值是String類型,描述當前對象的有關信息。
如果直接打印某對象的引用,則默認會調用這個對象的toString()方法,默認打印的內容中包含這個引用所指向的內存地址。
可以根據需要在用戶自定義類中重寫toString()方法。
2.equals()方法
Object類中定義有public boolean equals(Object obj) 方法,提供定義對象是否“相等”的邏輯。
Object的equals方法定義為:x.equals(y),當x和y指向同一個地址時返回true,否則返回false。
String類中已經重寫了equals(Object obj)方法,重寫後的方法比較的是兩個字符串的”內容”是否一樣(註意:==比較對象的引用)。
可以根據需要在用戶自定義類型中重寫equals方法。
二:多態性
封裝是為了保護屬性的一種操作,繼承是為了擴展類的功能
是由封裝性和繼承性引出的面向對象程序設計語言的另一特征。
從方法的角度來看:
方法的重載與重寫
重載(overloading):根據傳入的參數不同,完成的功能也不同
重寫(override):子類根據需求重寫父類中的方法。
instanceof關鍵字
在java中可以使用instanceof關鍵字判斷一個對象是否屬於一個類的實例
格式:
對象 instanceof 類 ?返回boolean類型
final關鍵字
在JAVA中聲明類、屬性和方法時,可以使用關鍵字final來修飾。
註意:
1.final修飾變量(成員變量或局部變量),則成為常量,只能賦值一次
final 類型 variableName;
修飾成員變量時,定義時同時給出初始值,而修飾局部變量時不做要求。
2.final修飾方法,則該方法不能被子類重寫
final 返回值類型 methodName(paramList)
{
…
}
3.final修飾類,則類不能被繼承
…
}
三:抽象類與接口
用abstract修飾的類即為抽象類
abstract class 抽象類名{
}
抽象類不能被實例化,必須被繼承,抽象方法必須被重寫,生成它的子類。
由abstract修飾的方法就是抽象方法,抽象方法沒有方法體。
抽象類不一定要包含抽象方法,若類中包含了抽象方法,則該類必須被定義為抽象類。
如果一個子類沒有實現抽象父類中所有的抽象方法,則子類也成為一個抽象類。
構造方法、靜態方法、私有方法、final方法不能被聲明為抽象的方法。
接口
:
接口(interface)是抽象方法和常量值的定義的集合。
接口是一種“標準”、“契約”。
從本質上講,接口是一種特殊的抽象類,這種抽象類中只能包含常量和方法的定義,而沒有變量和方法的實現。
接口的聲明語法
包括接口聲明和接口體
完整的接口聲明:
[public] interface 接口名稱[extends listOfSuperInterface]
{ … }
接口體包括常量定義和方法定義
常量定義: type NAME=value; 該常量被實現該接口的多個類共享; 具有public ,final, static的屬性.
方法體定義:具有 public和abstract屬性
接口的實現類
:
與抽象類一樣,接口要使用也必須通過子類,子類通過implements關鍵字實現接口
一個類可以實現多個接口,在implements子句中用逗號分開
非抽象子類必須實現接口中定義的所有方法
實現格式:
class 子類 implements接口A,接口B…{
}
接口的使用規則:
接口中所有的方法都是public abstract。
在接口中聲明方法時,不能使用static,final,synchronized,private,protected等修飾符。
一個接口可以繼承自另一個接口。
java中不允許類的多繼承,但允許接口的多繼承。
接口中可以有數據成員,這些成員默認都是public static final
接口的用途:
(1)通過接口實現不相關類的相同行為,而無需考慮這些類之間的關系.
(2)通過接口指明多個類需要實現的方法
(3)通過接口了解對象的交互界面,而無需了解對象所對應的類
JAVA面向對象的多態性及抽象類和接口