一、面向對象
Java是由對象構成,不同對象之間相互調用形成業(yè)務邏輯。
類和對象(實例) 的區(qū)別:類是模板,對象是類的具體實例
面向對象的三個特點:
封裝:數據封裝起來,不讓外部隨便訪問,如身份證號
多態(tài):同一件事情可以有多種做法
繼承:父類子類
二、類
1.類的聲明
[修飾符] class 類名 [extends 父類名] [implements 接口名]
修飾符有public、default、final、abstract四種,修飾符可以省略,缺省值為default
public:項目中所有的類都可以訪問
protected:自身、子類和本包中的類
private:只有當前類中可以訪問
default:同一包中的 類
2.類的主體定義
{
成員變量聲明;
成員方法實現;
}
a.成員變量:
定義方法:
[修飾符] 變量類型 變量名
b.方法:類的成員方法簡稱方法,方法可分為普通方法、構造方法、main方法
構造方法:構造方法必須與類名同名,構造方法與成員方法最大的差異就在于構造方法沒有返回類型,成員方法即使沒有返回值也需要設置返回類型為viod,而構造方法連void都不能寫上。
普通方法:
[修飾符] 返回類型 方法名 ( 參數列表 ) [throw 異常類]
main方法:是一種特殊的成員方法,是Java程序的入口
static:
static修飾的變量稱為類變量
static修飾的方法稱為類方法
類方法的重要原則:
1.類方法只能訪問方法體內的局部變量、參數、靜態(tài)變量。不能訪問所屬類的非靜態(tài)變量。
2.類方法中沒有this和super關鍵字。
final:
final加到變量上,成為常量
final 加到方法前,這個方法不能被子類覆蓋(override)
final加到類前,表示這個類不能被繼承
因為final修飾變量時,第一次賦值之后就無法改變,因此它的初始化工作非常重要,一般在聲明變量的時候或者在類中的構造方法內進行初始化。
三、繼承
兩個類存在繼承關系,則子類會自動繼承父類的方法和變量,在子類中可以調用父類的方法和變量。在java中,只允許單繼承,也就是說 一個類最多只能顯示地繼承于一個父類。但是一個類卻可以被多個類繼承,也就是說一個類可以擁有多個子類。
子類繼承父類的方法
同樣地,子類也并不是完全繼承父類的所有方法。
1)能夠繼承父類的public和protected成員方法;不能夠繼承父類的private成員方法;
2)對于父類的包訪問權限成員方法,如果子類和父類在同一個包下,則子類能夠繼承;否則,子類不能夠繼承;
3)對于子類可以繼承的父類成員方法,如果在子類中出現了同名稱的成員方法,則稱為覆蓋,即子類的成員方法會覆蓋掉父類的同名成員方法。如果要在子類中訪問父類中同名成員方法,需要使用super關鍵字來進行引用。
注意:隱藏和覆蓋是不同的。隱藏是針對成員變量和靜態(tài)方法的,而覆蓋是針對普通方法的。
構造器
子類是不能夠繼承父類的構造器,但是要注意的是,如果父類的構造器都是帶有參數的,則必須在子類的構造器中顯示地通過super關鍵字調用父類的構造器并配以適當的參數列表。如果父類有無參構造器,則在子類的構造器中用super關鍵字調用父類構造器不是必須的,如果沒有使用super關鍵字,系統會自動調用父類的無參構造器
四、多態(tài)
多態(tài)性是指相同方法名的若干方法,具有不同的實現方式(即方法體不同)。多態(tài)性有兩種表現形式
(1)方法重載(overloading):又稱為靜態(tài)多態(tài)性,即同一類中可以有多個同名方法,但是這些方法的 參數個數、參數類型、參數順序 不能完全相同。返回類型不要求完全相同,但是在返回類型不同的情況下,參數仍然應遵守原則不能完全一樣。
(2)方法覆蓋(overriding):又稱為動態(tài)多態(tài)性,即子類可以對父類的方法進行重新定義,而且除了方法名相同,還要求其返回類型、參數形態(tài)(類型和順序)完全一樣。
向上轉型:
java中子類可以實現到父類的類型轉換,這種轉換被稱為向上轉型。
JPeople p1 = new JStudent(); //子類JStudent向父類JPeople轉型
父類到子類的直接轉型則不被允許
JStudent p3 = new JPeople(); //父類JPeople到子類JStudent進行轉型不被允許,會報錯
向上轉型是安全的,是面向對象設計代碼重用的基礎。
instanceof: //判斷某個對象是否屬于某個類,返回一個布爾值
eg. if(animal instanceof Dog)
Dog d = (Dog)animal //類型轉化
組合和繼承的關系:
組合是has a 的關系,繼承是is a 的關系
優(yōu)先使用組合,因為它更靈活
繼承盡量不要超過三層
五、abstract抽象類和抽象方法
不能被實例化
抽象類通常會抽象方法,只有方法聲明,沒有方法體
抽象方法必須在子類中實現
六、接口
可以定義常量,默認為public,static,final
可以定義靜態(tài)方法
抽象方法:
非抽象方法:
default修飾的實例方法
public static 修飾的類方法
擴充接口:default void
接口的繼承
接口繼承具有多重性,一個類可以繼承多個接口,父接口之間用逗號隔開
七、內部類
當一個類B會被類A使用的時候
好處是:封號的封裝,可以訪問內部變量
Inner classes 成員內部類
成員內部類可以無條件訪問外部類的所有成員屬性和成員方法(包括private成員和靜態(tài) ? ? ? 成員)。內部類可以擁有private訪問權限、protected訪問權限、public訪問權限及包訪問權限
Method local Inner classes 局部內部類
局部內部類就像是方法里面的一個局部變量一樣,是不能有public、protected、private以及static修飾符的。
Anonymous Inner classes 匿名內部類
匿名內部類是唯一一種沒有構造器的類。
Static Nested classed 靜態(tài)內部類