天天看點

總結上周 JavaSE

封裝:隐藏,封裝資料實體

要求:

1.   屬性是私有的(在其他類中不可見)

2.   提供一套get/set的公用方法

3.   根據需要可以在方法中添加其他邏輯

Java中的特殊函數:

1.    構造函數:用于建立對象,和初始化對象資料

特點:

1)    函數名必須和類名一緻

2)    構造函數沒有傳回值,連void都不能有

3)    構造函數可以有0個或多個,多個構造函數參數清單必須不同

4)    構造函數必須跟着new關鍵字一起使用

new 關鍵字在計算機中用于開辟空間

public Users(){} :預設構造函數,如果在,類中沒有顯式的定義任何構造函數,那麼計算機會在建立對象時,隐式的添加預設構造函數,但是如果類中顯式的定義了構造函數,那麼計算機就不會隐式建立預設構造函數。

建議:一般的實體類至少有2個構造函數(預設和全體初始化)

2.toString 函數:用于在輸出對象時的資料字元串格式

在程式中列印輸出對象時,計算機會隐式的去調用對象的toString方法

2.    靜态函數:使用static修飾的函數,可以直接使用類名調用(放在靜态域裡面,普通函數放在堆棧裡面的)

文法:類名.函數名();

靜态函數一般放在工具類

單例模式:讓一個類隻能建立一個對象

設計模式:設計經驗,是一套固定的設計代碼經驗

步驟:

1)讓構造函數私有

2)提供static 修飾的函數傳回一個對象

固定模式:

public class OOTest {

    private OOTest(){}

    //餓模式

    private static OOTest oo= new OOTest();

    publicstatic OOTest getOO(){

       returnoo;

    }

    //懶模式

    private static OOTest oo = null;

    public static OOTest getOO(){

       if(oo == null){

           oo = new OOTest();

       }

       returnoo;

    }

}

Exception in thread "main" java.lang.NullPointerException

    atcom.mantou.test_2016_11_22.Work.check(Work.java:70)

    atcom.mantou.test_2016_11_22.Work.login(Work.java:30)

    atcom.mantou.test_2016_11_22.Work.map(Work.java:17)

    atcom.mantou.test_2016_11_22.Test_main.main(Test_main.java:7)

以上報錯,表示空指針異常,

面向對象-----繼承,提高代碼的重用性

父類(基類)    子類(派生類)

子類通過extends關鍵字繼承父類所有非私有的屬性和方法

文法:

Public class 類名 extends 類名{

}

Java隻允許單個繼承

重載:  (所有類中都可以使用)

相同方法名不同參數清單的方法。 (重載隻和參數清單有關系和傳回值沒有關系)Eg:構造函數

重寫(也稱覆寫):(必須存在繼承關系,而且隻能在子類中重寫父類的函數)

相同方法(傳回值類型,參數清單,方法名都相同)不同實作(方法體)

所有的類都預設隐式繼承Object類

如果子類重寫父類函數,那麼在調用時計算機會先在子類查找,如果存在就直接使用子類函數,如果不存在就使用父類函數。

建議:在子類重寫父類函數的時候,建議使用Override 注解驗證。

this表示目前類對象,super表示對父類的引用

抽象類:有抽象方法類一定是抽象類,但是抽象類不一定有抽象方法

繼承抽象類的子類必須重新父類的所有抽象方法

使用Abstract 修飾的類:

Public abstract class 類名{}

抽象方法:

修飾符abstract 傳回值類型 函數名(參數清單){}

接口:特殊的抽象類,在1.7以前的接口中的屬性和函數都是抽象的

接口中的屬性必須定義為  public static final   資料類型   變量名  =   值  ;

屬性名必須全部大寫!

final 用于修飾常量,常量隻能初始指派一次,其他地方不能重新指派

定義接口文法:

Public    interface   接口名{}

接口中的函數預設就是 abstract 的,可以省略不寫

Java是單繼承的,但是可以實作多個接口

實作接口的文法:(可以不用繼承父類,直接實作接口)

public class    子類名  extends 父類名  implements 接口1,接口2…{}

使用建議:先定義接口(規則),多個接口的公用部分使用抽象類

繼承中構造函數執行順序:沒有父親那來兒子,

建立子類對象時,java會隐式執行父類的構造函數

super():表示調用父類構造函數,在子類中計算機預設調用父類無參構造函數

多态:相同方法不同實作(重寫的具體使用)

Java 中展現了多态性:重寫

實作多态的思想:父類的引用指向子類的執行個體,接口引用指向接口實作類執行個體

eg:  People peo = new Student();

沒有繼承,就沒有多态

父類引用隻能調用父類存在的函數,在運作時java或先去子類中查找是否存在重寫的方法,如果存在就直接調用子類函數,如果不存在才調用父類函數

 父類引用不能調用子類特有的函數,如果想要調用隻能通過向下轉型,讓子類引用調用自己的函數,注意在強制轉換類型前都必須進行類型判斷

public void job(People peo) {

    peo.show();

if(peo instanceof Student){

       ((Student)peo).play();

    }else if (peo instanceof Teacher){

       ((Teacher)peo).play();

    }

}

判斷文法:

(); 執行個體 instanceof   類型  :判斷執行個體指向的資料類型是否屬于指導類型 

向上轉換是自動轉  :People peo  = new Student();

向下轉型必須強制轉換 : Student stu = (Student)peo

Student stu = new Student();

在堆中開辟空間生成Student對象,記憶體自動生成一個辨別位址,将位址指派給棧中的stu變量

”==”是比較棧中的值相等

Equals 比較的是堆得值相等

面向對象程式設計是Java裡面的大頭, 封裝,繼承,多态等對面向對象程式設計起到了很大的幫助。  封裝簡單的說就是講屬性元素通過get  和set方法封裝起來,隻能通過get,set方法調用,這樣增加了代碼的安全性。  其中還有單例模式, 也就是讓一個類隻能建立一個對象,這種模式有效地增強了代碼的安全性。  

然後就是繼承,java裡面隻能實作 單繼承。 java裡面可以實作多接口。 說白了,繼承可以有效地減少代碼重用性!! 繼承裡面還包括抽象類的繼承,重寫等知識點。

然後就是多态了,簡單的說,沒有繼承就沒有多态。多态是實作重寫的一種。