java面向對象的註意點1
面向對象思想特點:
* a:是一種更符合我們思想習慣的思想
* b:可以將復雜的事情簡單化
* c:將我們從執行者變成了指揮者
* 角色發生了轉換
面向對象開發,設計以及特征:
* A:面向對象開發
* 就是不斷的創建對象,使用對象,指揮對象做事情。
* B:面向對象設計
* 其實就是在管理和維護對象之間的關系。
* C:面向對象特征
* 封裝(encapsulation)
* 繼承(inheritance)
* 多態(polymorphism)
類和對象的概念:
* a:類:是一組相關的屬性和行為的集合
* b:對象:是該類事物的具體體現
* c:舉例:
* 類 學生
* 對象 具體的某個學生就是一個對象
成員變量和局部變量的區別:
* A:在類中的位置不同
* 成員變量:在類中方法外
* 局部變量:在方法定義中或者方法聲明上
* B:在內存中的位置不同
* 成員變量:在堆內存(成員變量屬於對象,對象進堆內存)
* 局部變量:在棧內存(局部變量屬於方法,方法進棧內存)
* C:生命周期不同
* 成員變量:隨著對象的創建而存在,隨著對象的消失而消失
* 局部變量:隨著方法的調用而存在,隨著方法的調用完畢而消失
* D:初始化值不同
* 成員變量:有默認初始化值
* 局部變量:沒有默認初始化值,必須定義,賦值,然後才能使用。
* 註意事項:
* 局部變量名稱可以和成員變量名稱一樣,在方法中使用的時候,采用的是就近原則。
匿名對象的概述和應用:
* A:什麽是匿名對象
* B:匿名對象應用場景
* a:調用方法,僅僅只調用一次的時候。
* 那麽,這種匿名調用有什麽好處嗎?
* 節省代碼
* 註意:調用多次的時候,不適合。匿名對象調用完畢就是垃圾。可以被垃圾回收器回收。
* b:匿名對象可以作為實際參數傳遞
private關鍵字的概述和特點:
private關鍵字特點
* a:是一個權限修飾符
* b:可以修飾成員變量和成員方法
* c:被其修飾的成員只能在本類中被訪問
構造方法的重載及註意事項:
* B:構造方法註意事項
* a:如果我們沒有給出構造方法,系統將自動提供一個無參構造方法。
* b:如果我們給出了構造方法,系統將不再提供默認的無參構造方法。
* 註意:這個時候,如果我們還想使用無參構造方法,就必須自己給出。建議永遠自己給出無參構造方法
* C:給成員變量賦值的兩種方式
* a:setXxx()方法
* b:構造方法
static關鍵字的特點:
* A:static關鍵字的特點
* a:隨著類的加載而加載
* b:優先於對象存在
* c:被類的所有對象共享
* 舉例:咱們班級的學生應該共用同一個班級編號。
* 其實這個特點也是在告訴我們什麽時候使用靜態?
* 如果某個成員變量是被所有對象共享的,那麽它就應該定義為靜態的。
* 舉例:
* 飲水機(用靜態修飾)
* 水杯(不能用靜態修飾)
* d:可以通過類名調用
* 其實它本身也可以通過對象名調用。
* 推薦使用類名調用。
* 靜態修飾的內容一般我們稱其為:與類相關的,類成員
static的註意事項:
* A:static的註意事項
* a:在靜態方法中是沒有this關鍵字的
* 如何理解呢?
* 靜態是隨著類的加載而加載,this是隨著對象的創建而存在。
* 靜態比對象先存在。
* b:靜態方法只能訪問靜態的成員變量和靜態的成員方法
* 靜態方法:
* 成員變量:只能訪問靜態變量
* 成員方法:只能訪問靜態成員方法
* 非靜態方法:
* 成員變量:可以是靜態的,也可以是非靜態的
* 成員方法:可是是靜態的成員方法,也可以是非靜態的成員方法。
* 簡單記:
* 靜態只能訪問靜態。
靜態變量和成員變量的區別:
* 靜態變量也叫類變量 成員變量也叫對象變量
* A:所屬不同
* 靜態變量屬於類,所以也稱為為類變量
* 成員變量屬於對象,所以也稱為實例變量(對象變量)
* B:內存中位置不同
* 靜態變量存儲於方法區的靜態區
* 成員變量存儲於堆內存
* C:內存出現時間不同
* 靜態變量隨著類的加載而加載,隨著類的消失而消失
* 成員變量隨著對象的創建而存在,隨著對象的消失而消失
* D:調用不同
* 靜態變量可以通過類名調用,也可以通過對象調用
* 成員變量只能通過對象名調用
多態中向上轉型和向下轉型:
* 父類是Animal,子類是Cat
* Animal a = new Cat();向上轉型
* Cat c = new Animal();錯誤的
* Cat c = (Cat)a;向下轉型
抽象類的概述及其特點:
* B:抽象類特點
* a:抽象類和抽象方法必須用abstract關鍵字修飾
* abstract class 類名 {}
* public abstract void eat();
* b:抽象類不一定有抽象方法,有抽象方法的類一定是抽象類
* c:抽象類不能實例化那麽,抽象類如何實例化呢?
* 按照多態的方式,由具體的子類實例化。其實這也是多態的一種,抽象類多態。
* d:抽象類的子類
* 要麽是抽象類
* 要麽重寫抽象類中的所有抽象方法
抽象類的成員特點:
* A:抽象類的成員特點
* a:成員變量:既可以是變量,也可以是常量。
* b:構造方法:有。
* 用於子類訪問父類數據的初始化。
* c:成員方法:既可以是抽象的,也可以是非抽象的。
B:抽象類的成員方法特性:
* a:抽象方法 強制要求子類做的事情。
* b:非抽象方法 子類繼承的事情,提高代碼復用性。
接口的概述及其特點:
* A:接口概述
* 從狹義的角度講就是指java中的interface
* 從廣義的角度講對外提供規則的都是接口
* B:接口特點
* a:接口用關鍵字interface表示
* interface 接口名 {}
* b:類實現接口用implements表示
* class 類名 implements 接口名 {}
* c:接口不能實例化
* 那麽,接口如何實例化呢?
* 按照多態的方式來實例化。
* d:接口的子類
* a:可以是抽象類。但是意義不大。
* b:可以是具體類。要重寫接口中的所有抽象方法。(推薦方案)
接口的成員特點:
* A:接口成員特點
* 成員變量;只能是常量,並且是靜態的。
* 默認修飾符:public static final
* 建議:自己手動給出。
* 構造方法:接口沒有構造方法。
* 成員方法:只能是抽象方法。
* 默認修飾符:public abstract
* 建議:自己手動給出。
類與類,類與接口,接口與接口的關系:
* A:類與類,類與接口,接口與接口的關系
* a:類與類:
* 繼承關系,只能單繼承,可以多層繼承。
* b:類與接口:
* 實現關系,可以單實現,也可以多實現。
* 並且還可以在繼承一個類的同時實現多個接口。
* c:接口與接口:
* 繼承關系,可以單繼承,也可以多繼承
抽象類和接口的區別:
* A:成員區別
* 抽象類:
* 成員變量:可以變量,也可以常量
* 構造方法:有
* 成員方法:可以抽象,也可以非抽象
* 接口:
* 成員變量:只可以常量
* 成員方法:只可以抽象
* B:關系區別
* 類與類
* 繼承,單繼承
* 類與接口
* 實現,單實現,多實現
* 接口與接口
* 繼承,單繼承,多繼承
* C:設計理念區別
* 抽象類 被繼承體現的是:”is a”的關系。抽象類中定義的是該繼承體系的共性功能。
* 接口 被實現體現的是:”like a”的關系。接口中定義的是該繼承體系的擴展功能。
java面向對象的註意點1