封裝、繼承、多型
符合我們思想習慣的思想、複雜事情簡單化、執行者變成指揮者
事物----類—封裝(屬性,功能);
屬性—成員變數(屬性);
功能—成員方法(功能)
例項化類(建立物件):leiming duixiangming=new leiming();
獲取屬性:duixiangming.shuxingming;
呼叫方法:duixinagming.fangfaming;
(成員變數可以不賦初值,有預設值;)
是指隱藏物件的屬性和實現細節,僅對外提供公共訪問方式。
好處:隱藏實現細節,提供公共的訪問方式
提高了**的復用性
提高安全性。
原則:將不需要對外提供的內容都隱藏起來。
把屬性隱藏,提供公共方法對其訪問。
定義類其實就是定義類的成員(成員變數和成員方法)
成員變數:和以前定義變數是一樣的,只不過位置發生了改變。在類中,方法外。
成員方法:和以前定義方法是一樣的,只不過把static去掉,後面在詳細講解static的作用。
類和物件的概念:類:是一組相關的屬性和行為的集合
物件:是該類事物的具體體現
構造方法:方法名和類名相同,沒有返回值型別,也無具體返回值,無需void.
作用:對類進行初始化,
注意事項:系統預設提供空參構造方法
如果自己手動寫出有參構造則會自動覆蓋系統給出的空參構造
建立物件要借助構造方法完成類的例項化
給成員變數賦值的兩種方式:set***()方法、構造方法
方法過載:允許乙個類中可以存在多個同名方法,引數個數或型別不一樣
自定義的類中,手動給出有參構造後,預設的空參構造就消失,若需要使用,則需另行寫出乙個空參構造。(否則會報錯)
有參構造建立物件並給成員變數賦值等效於用空參構造建立並呼叫set()方法
方法重寫:子類與父類重名方法(方法名、引數列表、返回值型別都一樣),呼叫子類方法。
快捷鍵:ctrl+o(同時對子類的重寫加標記)
應用: 當子類需要父類的功能,而功能主體子類有自己特有內容時,可以重寫父類中的方法。這樣,即沿襲了父類的功能,又定義了子類特有的內容。
注意事項:只能重寫非private;
被重寫的方法許可權修飾符不能低於(一樣或者高於)父類;
靜態方法無法重寫;(理由見多型)
final修飾的只繼承不重寫
分類:區域性**塊、構造**塊、靜態**塊、同步**塊(多執行緒)
區域性**塊:方法中;及早釋放**塊的記憶體
構造**塊:類中,平行方法;優先構造方法執行
靜態**塊:給構造**塊前加static修飾;由於類只載入一次,所以靜態**塊只執行一次;可以進行一些初始化操作
關鍵字:extends
優點:提高**的復用性;維護性(雙面性);
缺點:類之間增加耦合性(軟體設計原則:高內聚,低耦合)
注意事項:只支援單繼承,可以多層繼承;
只能繼承非private;
頂層父類object,所有的類都可直接或者間接繼承
構造方法不可繼承
繼承中也遵循就近原則
建立子類物件時,父類空參構造先執行(子類繼承父類,需先將父類初始化(程式自己會執行)才能使用)
每個類的構造方法中第一行,預設語句super(),呼叫父類的空參構造(用來初始化父類)
當要呼叫父類有參構造,用super(canshu),必須位於第一行
概述:一種事物不同時間的不同狀態
前提:有繼承關係;有方法重寫;父類引用指向子類物件。
格式:父 f = new 子();
成員訪問特點:
成員變數:編譯看左邊,執行看左邊。
構造方法:建立子類物件的時候,會訪問父類的構造方法,對父類的資料進行初始化。
成員方法:編譯看左邊,執行看右邊。
靜態方法:編譯看左邊,執行看左邊。(靜態和類相關,算不上重寫,所以,訪問還是左邊的)
好處:提高了**的維護性(繼承保證)
提高了**的擴充套件性(由多型保證)
弊端:不能使用子類特有的功能
解決:把父類的引用強制轉換為子類的引用。(向下轉型)
向下轉型:zi zi=(zi) fu;(將父類強制向下轉型)
zi.fangfa();(呼叫子類獨有的方法)
定義:將乙個類定義到另乙個類的內部;成員內部類,區域性內部類
訪問特點:內部類可以直接訪問外部類的成員,包括私有。
外部類要訪問內部類的成員,必須建立物件。
按照內部類位置分類:
成員位置:在成員位置定義的類,被稱為成員內部類。
區域性位置:在區域性位置定義的類,被稱為區域性內部類。
成員內部類:相當於外部類的成員位置
格式: 外部類名.內部類名 物件名 = 外部類物件.內部類物件;
建立物件:waibuleiming.neibuleiming mingzi=new waibulei().new neibulei();
特點: 內部可以直接訪問外部成員包括私有的;
外部訪問內部需建立物件;
可以被private修飾,但外界不能直接建立物件(借助本類平行方法呼叫);
可以被static修飾,wai.nei mingzi=new wai.nei();
修飾符:
private 為了保證資料的安全性
static 為了方便訪問資料
注意事項: 靜態內部類訪問的外部類資料必須用靜態修飾。
成員方法可以是靜態的也可以是非靜態的
被靜態修飾後的訪問:
格式:外部類名.內部類名 物件名 = new 外部類名.內部類名();
區域性內部類:處於外部類的方法中
特點: 外界無法建立,方法中建立在呼叫方法;
可以在本方法內建立物件;
可以直接訪問外部,包括私有;
區域性內部類訪問外部類的區域性變數,變數要加final變成常量(因為區域性變數會隨著方法的呼叫完畢而消失,這個時候,區域性物件並沒有立馬從堆記憶體中消失,還要使用那個變數。為了讓資料還能繼續被使用,就用fianl修飾,這樣,在堆記憶體裡面儲存的其實是乙個常量值。)
可以建立內部類物件,通過物件呼叫內部類方法,來使用區域性內部類功能
匿名內部類:區域性內部類的簡寫;
前提:存在乙個類或者介面;這裡的類可以是具體類也可以是抽象類。
本質:是乙個物件,是實現了該介面或繼承了該抽象類的子類物件;
作用:作為引數傳遞(new的一整塊)
格式:new 類名或者介面名() ;
匿名物件: new duixiang();每乙個新物件都是乙個新的空間。(預設呼叫空參構造)
作為實參傳遞;一次性物件。
不加new的物件為原先建立的物件
應用場景:呼叫方法,僅僅只呼叫一次的時候。
匿名物件可以作為實際引數傳遞
(看到乙個方法的形參,要乙個類型別,那麼傳該類的物件)
快捷鍵設定set:alt+insert 選擇set get 選擇
JavaSE 物件導向下
1.1.定義乙個father和child類,並進行測試。要求如下 1 father類為外部類,類中定義乙個私有的string型別的屬性name,name的值為 zhangjun 2 child類為father類的內部類,其中定義乙個introfather 方法,方法中呼叫father類的name屬性...
JAVASE 物件導向(二)
物件導向的特徵 封裝性,繼承性,多型性 封裝性 當建立了類以後,通過 物件.屬性 的方式對相應的屬性賦值的話,可能會出現不滿足實際情況的意外,我們考慮不讓物件直接作用屬性,而通過 物件.方法 的形式,來控制物件屬性的訪問。1.將屬性私有化 2.提供公共的set,get方法 許可權從大到小 publi...
JAVASE 物件導向 四
多型 在同乙個時刻體現不同的狀態,多型主要體現在向不同的物件傳送同乙個資訊,不同的物件在接受到資訊後產生不同的行為 方法 物件可以用自己的方法去響應共同的資訊。多型性的表現 1.方法的過載與重寫 2.子類物件的多型性 使用的前提 1.要有繼承關係。2.要有方法的重寫 格式 person p new ...