OOP Day05
====================
抽象
接口
Object
1 abstract class 抽象類–不具體的類
1) 抽象方法,只有行為的概念,沒有具體的行為實現。
使用:abstract 關鍵字修飾,並且沒有方法體。
2) 包含抽象方法的類,就一定是抽象類。
使用: abstract 關鍵字修飾,包含抽象方法。
如:平面圖形一定可以計算面積。
3) 抽象類不能直接創建實例。可以定義引用變量。
4) 抽象類只能被繼承,一個具體類繼承一個抽象類,必須實
現所有抽象方法。
5) 抽象方法和抽象類非常適合作為系統的分析和設計的工具。
public abstract class CRMSystem{
public abstract long add(Client newGuy);
public abstract Event add(Event e, Client guy);
public abstract Event[] todayEvents();
}
2 接口, 相當於純抽象類(cpp純虛類)
1 接口:全部的方法都是抽象方法,全部的屬性都是常量。
接口用來表示純抽象概念,沒有任何具體的方法和屬性。
public interface CRMSystem{
Client add(Client newGuy);
Event add(Event e, Client guy);
Event[] todayEvents();
}
2 不能實例化,可以定義變量。
3 接口變量可以引用具體實現類的實例。
4 接口只能被實現(繼承),一個具體類實現接口,必須使用全部的
抽象方法。
5 接口之間可以繼承。
6 一個具體類可以實現多個接口,實現多繼承現象,表示:
一個概念即是XXX也是XXX.
7 接口中的屬性,默認是常量 public static final
8 接中的方法一定是:public abstract
9 實現一個接口,使用關鍵字implements, 實現實際上是
一種繼承關係。接口和實現類是父子類型的關係
1 Object
1) Java 類默認繼承於Object! -> 啥都是東西
繼承了Object 的屬性和方法
如: toString(), hashCode(), equals()
2) toString() 方法, 經常有系統默認調用, 活動當前對象的
文本描述, Object默認返回: 全限定名@hashCode
建議覆蓋為: 當前對象的文本描述, (看着辦)
3) equals 是用來比較兩個對象是否相等的方法。
區別:引用相等 與 對象相等
引用值相等: 使用 “==”
對象的內容相等: .equals() 方法
equals在Object類中聲明,默認的比較規則是:比較引用
建議覆蓋,實現對象的比較(比較對象的狀態,就是比較對象
的數據)。
* 覆蓋規則:
a 自反性:對於任何非空引用值 x,x.equals(x)
都應返回 true。
b 對稱性:對於任何非空引用值 x 和 y,當且僅當
y.equals(x) 返回 true 時,x.equals(y)
才應返回 true。
c 傳遞性:對於任何非空引用值 x、y 和 z,如果
x.equals(y) 返回 true,並且 y.equals(z) 返回
true,那麼 x.equals(z) 應返回 true。
d 一致性:對於任何非空引用值 x 和 y,多次調用
x.equals(y) 始終返回 true 或始終返回 false,
前提是對象上 equals 比較中所用的信息沒有被修改。
e 對於任何非空引用值 x,x.equals(null) 都應返回
false。
4) hashCode()
A hashCode()方法要與equals方法一同覆蓋
a 當兩個對象equals比較為true時候,這兩個對象應該
具有相同的hashCode()值
b 當兩個對象equals比較為false時候,這兩個對象應該
具有儘可能不相同的hashCode()值
c hashCode() 值要穩定(一致性),一個對象創建以
後就不應該再變化
B 默認的hashCode() 值是當前堆對象地址轉換的一個整數
這個整數不是內存地址。
C 一般使用對象的OID值作為hashCode的值。
OID 對象的唯一編號,在工程項目中一般採用數據庫來
生成OID,也就是數據庫中的“主鍵”
作業:
1 複習並且全部使用課堂案例代碼
2 重新寫 類 Person, Student, Point, Circle, Book
按照JavaBean 規範書寫, 並且提供如下方法覆蓋:
toString() equals() hashCode()
創建測試案例: 測試 toString() equals() hashCode()
提示: 對於有ID的類, 使用ID作為比較依據和hashCode()結果
3 測試全部課堂的正則表達式
嘗試編寫規則: 電話號碼可能有3-4位區號: 0415-5561111
4 選做:
編寫方法,實現從控制台讀取點坐標, 並且解析返回Point對象
如果用戶輸入格式錯誤就重新輸入.
提供解析方法:
public static Point parse(String location)
提示:
使用 matches() 驗證坐標規則
使用 split() 切分坐標
解析整數使用:Integer.parseInt(String str) -> int
預習: StringBuilder, StringBuffer, Java集合框架