天天看點

java面向對象的小項目_Java——面向對象(小知識點)

主要内容:類和對象,方法詳解,成員變量和局部變量,隐藏和封裝,深入構造器,類的繼承,多态,繼承群組合,初始化塊。

1.類和對象:

所有使用類定義的變量都是引用變量,引用變量裡存放的僅僅是一個引用,它指向實際的對象。

Java支援面向對象的三大特征:封裝、繼承和多态。

類裡的各成員之間的定義順序沒有任何影響,static修飾的成員不能通路沒有static修飾的成員(即static修飾的方法不能使用this引用)。

static對應類變量、類方法;不使用static修飾的成員變量對應執行個體變量、執行個體方法。

static修飾的方法和成員變量,既可以通過類來調用,也可以通過執行個體來調用;沒有static修飾的普通方法和成員變量,隻可通過執行個體來調用。

普通方法可使用this調用本類中的普通方法,普通方法(即執行個體方法)需要通過對象通路,this即代表對象本身。this可以省略,但是依然存在。

對象可用調用static修飾的成員,但是不推薦!因為static為類修飾,用類名調用才符合實際。

2.方法詳解:

java裡的方法不能獨立存在,所有的方法都必須定義在類裡。方法在邏輯上,要麼屬于類,要麼屬于對象。

不同對象調用static方法,都會得到相同的結果(因為static方法本質就是類的);非static方法,不同對象調用,結果可能不同。

java方法的參數傳遞隻有一種:值傳遞。包括形參為類時,也是傳遞引用,即複制一個引用也指向存儲對象的實際位址。

堆記憶體中儲存對象本身,棧記憶體中儲存引用該對象的引用變量。

形參個數可變的方法:

//以可變個數形參來定義方法 ①

public static void test(int a,String... books);

//以數組形式來定義方法 ②

public static void test(int a,String [] books);

//調用

test(5,"www","ddd");//①可用。簡潔,但是也限制了個數可變的形參隻能處于形參清單的最後

test(5,new String []{"qqq","www"});//①②都可用

遞歸一定要向已知方向遞歸。

方法重載:隻和形參清單有關,和傳回值、修飾符等都無關。

//重載

public void test(String msg)

public void test(String... bookls)

//一個參數會自動調用第一種,若一個參數想調用第二種,應傳入數組

3.隐藏和封裝

排序:private

private:目前類

default(沒有修飾符):目前包

protected:目前包+不同包的子類

public:公共通路權限

不是有了目錄結構,就等于有了包名。java的包機制需要兩個方面的保證:①源檔案裡用packge語句指定包名 ②class檔案必須放在對應路徑下 。 缺一不可

packge語句必須作文源檔案的第一條非注釋性語句。

父包和子包确實存在了某種内在的邏輯關系,但是在用法上不存在任何關系。不論處于何種檔案層次,調用一個包(特别是子包)都要使用全名,不能省略父包部分。

import lee.*;隻會調用lee包下的所有類,而不包含lee包的子包的類。

import後可以省略寫包名;而import static後則可以連類名都省略。(因為import 引入包,static修飾後引入類)

import static java.lang.System.*;

//之後使用 out.println();即可

當程式員調用構造器時,系統會先為對象配置設定記憶體,在為這個對象執行預設初始化。這些操作在構造器執行之前就完成了。

下面代碼實作了在一個構造器中直接使用另一個構造器來初始化代碼:

public Apple(String name,String color,double weight)//三個形參的構造函數

{

this(name,color);//調用含有兩個形參的構造函數

this.weight=weight;

}

5:類的繼承:

java是單繼承。java隻能有一個直接父類,可以有無數個間接父類。

java的子類不能獲得父類的構造器。但是可以調用——super(size,name)

方法重寫要遵循“兩同兩小一大”:方法名、形參清單相同;子類方法傳回值類型、聲明抛出的異常類應比父類方法更小或相等;子類方法的通路權限應比父類的更大或相等。

可以使用super或父類類名調用父類中被覆寫的方法。(super通路執行個體,父類類名通路static)(或者向上轉型—((parent)d).tag—)

如果子類定義了一個與父類方法具有相同方法名,但參數清單不同的方法,就會形成父類方法和子類方法的重載。

當程式建立有一個子類對象時,系統不僅會為該類中定義的執行個體變量配置設定記憶體,也會為它從父類繼承得到的所有執行個體變量配置設定記憶體。

6.多态:

java引用變量有兩個類型:編譯時類型,運作時類型

java面向對象的小項目_Java——面向對象(小知識點)

如圖将子類對象直接指派給父類引用變量,成為向上轉換,由系統自動完成。四種情況

如圖④情況,因為引用變量隻能調用它編譯類型的方法,是以要想調用運作時的方法,需要向下轉型——(type)variable

這種類型轉換注意:①基本類型之間的轉換隻能在數值類型之間進行。②引用類型之間轉換隻能在具有繼承關系的兩個類型才行,這個對象必須是子類執行個體!否則會classCastException異常

if(objPri instanceof String) //使用instanceof運算符來判斷是否可以成功轉換

//使用要求:運算符前面操作數的編譯時類型要麼與後面的類相同,要麼與後面的類有父子繼承關系

//判斷要求:運算符前面操作數的運作時類型要麼與後面的類相同,要麼有父子孫關系,其他全部false

{

String str=(String)objPri;

}

7.繼承群組合:

類複用:繼承(破壞封裝性),組合

繼承:

java面向對象的小項目_Java——面向對象(小知識點)

繼承:鴕鳥類繼承鳥類

組合:胳膊類組合到人的類

8.初始化塊

①變量無論先定義還是後定義,都是先配置設定記憶體,在從頭讀代碼初始化

java面向對象的小項目_Java——面向對象(小知識點)

②先執行初始化塊、聲明變量時指定的值(按代碼順序),後執行構造器

java面向對象的小項目_Java——面向對象(小知識點)

③先從上而下執行所有的靜态初始化塊,再從上而下的執行普通初始化塊和構造器。靜态初始化塊隻需要初始化一次!(靜态初始化,即類初始化,隻需初始化一次,就會儲存在java虛拟機-jvm)

java面向對象的小項目_Java——面向對象(小知識點)