1. 程式人生 > >JAVA面向對象的多態性及抽象類和接口

JAVA面向對象的多態性及抽象類和接口

抽象類接口Object類

一:Object類
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修飾類,則類不能被繼承

final class finalClassName{

}

三:抽象類與接口

用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面向對象的多態性及抽象類和接口