面向對象 Day02
====================
OO
類 引用 對象
構造器
方法
1 面向對象(OO)
1) 什麽是Object(對象), Object 本意:東西,是指壹個具體事物實例
2) 面向對象, 面向客觀事物之間的關系.
4) OOA面向對象分析/OOD 面向對象設計
客人來了(來了壹個客人類型的某人)
5) 面向對象概念
A 類型: 名詞概念, 如: 客人, 菜品, 廚師
B 引用(變量): 引用具體概念實例的代詞, 如: 某人, 特價菜
C 對象(東西): 具體概念的個體實例,如:張三豐這個人, 壹盤大盤雞
D 行爲(方法)
E 多態: 行爲/引用, 在具體情形下發生了變化的現象
壹盞燈: 多態的
打: 根據賓語發生變化
F 封裝: 任何對象實例都是盡可能封裝, 減少暴露
E 繼承: 概念的繼承關系
2 Java 類型, 引用變量 與 堆對象
1)Java 類, 是用來描述事物類型的. 如: 書
<圖書館管理系統>中的概念: 書 Book
書的特征: 書號, 書名, 編號, 作者, 價格…
2) 類的聲明:
public class Book{
long id;
String name;
String isbn; //書號
String[] authors; //作者
double price;
}
3) 引用變量與對象的創建過程:
A Java的內存管理與分配:
棧是壹塊Java使用內存區域, 使用的方式:LIFO(後來者居上)
堆也是壹塊Java使用內存區域, 使用方式:無序分配, 隨機分配
B 局部變量 與 堆對象空間分配
Java 局部變量(方法參數)在棧中分配, 是按照變量的類型分配.
對象在堆中分配, 按照類的屬性(實例變量)分配空間
C 變量類型與分配
變量分爲: 基本類型和引用類型
基本類型變量的空間大小: 就是基本類型的空間大小, 值是基本類型
的值
引用變量的值是壹個對象的地址值, 引用變量通過地址引用了壹個堆
對象.引用類型變量的占用空間大小和值管理是”透明的(不可看見)”,
由Java系統管理: 變量占用空間以及值的管理, 都是透明的.
4) 對象的屬性默認自動初始化的. 自動初始化爲”零”值, 引用爲null
5) 在null引用上調用屬性或方法, 會發生運行時異常
案例:
平面繪圖坐標系中的壹個點(Point),定義合理的屬性
坐標是int類型.
O+—————————–> X
|
|
|
|
| . p(x,y)
|
|
|
|
Y
3 構造器(構造方法) 的作用: 用來描述對象的初始化過程的.
1)
如: 月餅實例的創建, 使用面和餡創建.
制作(構造器)
月餅模子(類) —–> 月餅(對象)
原料(構建參數)
點類型 ——–> 原點
坐標(1,2)
2) Java中的構造器: 聲明在類內部, 方法名與類名壹致
的方法叫構造方法, 構造方法不能聲明返回值類型.
構造方法可以包含參數, 參數壹般是創建對象實例
必須依賴的條件(前提條件).
public class Point {
int x;
int y;
/** 構造器 */
public Point(int x, int y){
this.x = x;
this.y = y;
}
}
3) 對象實例化過程:
new運算: 創建對象實例
1 根據類的屬性在堆中分配對象空間.並且自動初始化實例變量(屬性)
2 根據參數類型調用構造器.
3 new運算返回對象的引用地址.(這個地址就是引用)
4) this 關鍵字
this 是對當前對象的引用, 是運行期間當前對象本身.
this是在運行期間, 作爲方法的第壹個隱含參數, 是局部變量
可以使用this明確的訪問當前對象的屬性或者方法
類似于”我”.
this() 是調用本類的其他構造器, 可以使用構造器的重用,
簡化代碼的實現.
* this() 必須寫在構造器的第壹行!
5) 構造方法重載: 參數不壹樣的構造器
案例: Point.java
方法簽名 = 方法名+參數類型列表
方法重載:a 方法名壹樣 b 方法參數不壹樣
也可以說: 方法名壹樣, 方法簽名不同的方法
6) 默認構造器
1 java 類壹定有構造器
案例: ConstructorDemo.java
2 如果類沒有聲明任何構造器,Javac自動提供壹個
默認構造器, 無參數默認構造器
3 如果提供構造器聲明, Javac將不再提供默認構
造器.
4 對象的方法
1) 表示對象的功能, 依賴于對象存在.
案例: Point.java
如: p1.distance() 和 p2.distance()
方法是動作,是功能,壹般用動詞聲明.
2)方法也經常重載, 重載:方法名壹樣, 參數不壹樣重載體現了,
功能的多態.重載的方法經常互相重用.
作業:
1 練習課題案例
2 繪制PointDemo.java 的運行內存原理圖
實現方法 public double distabce(int x, int y)
3 實現習題案例: 圓類, 矩形和Person類
案例1: 圓(Circle), 矩形(Rectangle)
圓: 包含 圓心(Point)和半徑(int)兩個屬性
矩形: 包含 頂點和寬,高三個屬性
提供合理的構造器
提供方法, 計算當前圖形的面積
計算當前圖形是否包含(contains(Point))指定的點
重載方法 contains(int x, int y) 圖形是否包含坐標x,y
案例2: 定義民政業務類 Person
定義屬性: 編號,名字,性別,年齡, 婚否, 身份證號, 地址, 電話,
伴侶
提供方法: 結婚, 參數是另外壹個人
定義合理的結婚規則
結婚結果, 如果成功就合理更新雙方的屬性 婚否和伴侶,
返回true, 代表結婚成功, 結婚失敗就返回false