Java基礎學習第六天

回顧

--------------------------------

class:類成員

構造函數:和類同名,無返回值。可以重載

第一條語句  this()(調自身)  super()(調超類構造)  默認是super(),超類無空構造 super中要指定構造函數的參數。

成員變量:修飾符 private public final  

成員函數

靜態成員:跟類有關,存在方法區

靜態代碼塊:  類加載時執行

構造代碼塊:{}  在創建對象時執行,每創建一個對象執行一次

抽象類:用abstract 修飾的類,不能用於創建對象,一定有構造函數

抽象方法:無方法體,用abstract修飾,用途:爲了讓子類便於實現。只能放在抽象類中。

final:最終的  修飾  類:不能繼承

方法:不能重寫  不能覆蓋

變量:不能重新賦值,爲常量

內部類: 定義在類內部的類,可定義在成員位置上

      定義在方法中

      內部類名存成文件 的格式:

定義在類中:外部類名$內部類名.class

定義在方法中:外部類名$序號內部類名.class

 

繼承:extends 

單重繼承,可多層繼承

 

JVM

-------------------------------

方法區:

棧區:調整大小  java  -Xss  

堆區:對象太多了,  java -Xms  java  -Xmx

 

=========================================================

 

 

接口    :  經編譯後也是生成class文件,但是用interfaec修飾的類

----------------------

  1. 格式:interface{ }

  2. 成員修飾符是固定的

    1. 成員變量:public  static       final

    2. 成員函數:public  abstract    說明接口中的所有方法都是抽象的。

    3. 發現接口中的成員都是public

  1. 接口的出現將“多繼承”通過另一種形式體現出來,即“多實現”

  2. 接口常用形容詞來命名。

 

接口的特點:

-------------------------------

  1. 接口是對外暴露的規則

  2. 接口是程序的功能擴展

  3. 接口的出現降低耦合性

  4. 接口可以用來多實現

  5. 類與接口之間是實現關係,而且類可以繼承一個類的同時實現多個接口。

  6. 接口與接口之間可以有繼承關係,可以繼承多個接口

  7. 接口的主要用作用是類與類、對象與對象之間的交互問題上

 

示例:

-------------------------------------------------------

class InterfaceDemo1{

public static void main(String[] args){

//建立類對象

WomenStar ws = new WomenStar();

//通過類象象調用方法

ws.white();

ws.rich();

//建立tuhao對象

TuHao tuhao = new TuHao();

//調用marry方法,傳入ws對象,因爲ws對象實現了White接口,而tuhao將white作爲參數傳入了方法,對接成功,所以tuhao對象的marry方法可以直接調用ws對象作爲方法的參數。

tuhao.marry(ws);

}

}

 

//定義一個名字爲white的接口

interface White{

//接口中的方法都是抽象的,所以方法無方法體,只有括號

public void white();

}

 

//定義一個名字爲 Rich 接口

interface Rich{

public void rich();

}

 

//類實現接口(接鍵字implements+接口名),如果類不是抽象的,在使用接口時,類中必須對接口中的方法進行實現,就算不需人任何方法也要實現一個空方法(實現的方法名要與接口中一致區分大小寫)。

//這裏分別調用實現了White 和 Rich 接口

class WomenStar implements White,Rich{

//實現接口中的方法

public void white(){

System.out.println("---在WomenStar類中對White接口實現White方法---");

}

public void rich(){

System.out.println("---在WomenStar類中對Rich接口實現rich方法---");

}

}

 

//定義Tuhao類

class TuHao{

//將接口作爲方法的參數傳入

public void marry( White w){

//通過傳用的參數類型,調用形參的方法(也就是接口的方法)

w.white();

}

}

 

class KoreanMan implements White{

public void white(){

System.out.println("---在KoreanMan類中對White接口實現White方法---");

}

 

--------------------------------------------------------

 

USB:

---------------------------

 

接口:面向接口編程的優勢: 

------------

降低耦合度。(就是降低交互的程度)

接口是最低標準。

多重繼承

 

多態:

---------------------------------------------------

定義:某一類事物的多種存 形式

例:動物中的貓、狗

貓這個對象對應的類開型貓類型

  X = new ();

同時貓也是動物中的一種,也可以把貓稱爲動物。

動物 y =  new ();

動物是貓和狗具體事物中抽取出來的

父類型引用指向了子類對象。

這種方式就像從不同角度來描述一個事物,就有不同的解釋與說法。只能從當前聲明的類型位置去調用父級及當前級別中的方法,而不能調用子類中的方法。

 

在成員變量與成員函數被重寫時,使用父類角度看子類,成員變量看父類自己的,成員函數使用子類的。

(類中,方法可以覆蓋,成員變量不能覆蓋)

 

繼承和實現是實現多態的前提條件

 

多態特點:

--------------------------------------------------------------------

成員函數:

編譯時:要查看引用變量所屬的類中是否有所調用的成員

在運行時:要查看對象所屬的類中是否有所調用的成員

成員變量:只看引用變量屬的類

 

匿名內部類

優點:將類的聲明、方法的實現、對象的創建一氣呵成,節省代碼量。

------------------------------------------------

示例:

class NoNameDemo1{

public static void main(String[] args){

RichMan rm = new RichMan();

//匿名內部類對象,

rm.findLover(new Wrb(){

public void white(){

System.out.println("很白");

}

});

}

}

//白富美

interface Wrb{

public void white();

}

 

class RichMan{

public void findLover(Wrb w){

w.white();

}

}

——————————————————

 

GUI

————————————————

graphic user interface

 

適配器模式(通過一個抽象類整合實現的方法)及方法鏈編程

————————————————————————————

示例及說明:

class AdapterDemo{

public static void main(String[] args){

//創建一個按鈕對象

Button b1 = new Button();

//調用按鈕對象的點擊方法;

//通過new MouseListener(){}創建匿名內部類,作爲傳入方法的參數,此方法參數爲MouseListener接口類型。

b1.setListener(new MouseListener(){

//對MouseListener接口方法進行空實現。

public void onClick(){

System.out.println("按鈕1——單擊");

}

public void onDbClick(){}

public void onRightClick(){}

public void onMiddleClick(){}

});

b1.click();

 

Button b2 = new Button();

b2.setListener(new MouseListener(){

//對MouseListener接口方法進行空實現。

public void onClick(){

System.out.println("按鈕2——單擊");

}

public void onDbClick(){}

public void onRightClick(){}

public void onMiddleClick(){}

});

b2.click();

/*  以上b1和b2兩個按鈕調用的方法是相同的,但卻又不得不重實現接口中的方法,這樣很繁瑣。

------------------------------------------

下面通過適配置模式對以上繁瑣的方法進行調整,先讓其符合一定條件,減化代碼,定義一個MouseAdapter的抽象類,並實現MouseListener接口

*/

Button b3 = new Button();

//這裏使用MouseAdapter適配器抽象類來完成

b3.setListener(new MouseAdapter(){

//對MouseListener接口中的方法,已由MouseAdapter適配器全部實現,這裏只需對需要使用的方法進行重新實現,從而節省了代碼量。

public void onClick(){

System.out.println("按鈕3——單擊");

}

});

b3.click();

 

Button b4 = new Button();

b4.setListener(new MouseAdapter(){

public void onClick(){

System.out.println("按鈕4——單擊");

}

public void onDbClick(){

System.out.println("按鈕4——雙擊");

}

});

b4.click();

b4.dbClick();

 

//將b4按鈕實現的功能融合到一行代碼中,形成一個匿名按鈕,執行click()方法

//此方法爲方法鏈編程,就是一直點連接的方法。

new Button().setListener(new MouseAdapter(){

public void onClick(){

System.out.println("單擊了一個匿名按鈕");

}

public void onDbClick(){

System.out.println("雙擊了一個匿名按鈕");

}

}).click()

  .dbClick();

 

}

}

 

//定義一個按鈕類,用來監聽鼠標發生的事件,並根據這些事件做出響應。

class Button{

//定義一個成員變量l,用於保存MouseListener接口類型的變量信息

private MouseListener l;

 

//爲按鈕填加一個監聽器,用於監聽鼠標事件,這時返回值爲void 是空的

//public void setListener(MouseListener l){

//當創建匿名按鈕時,在無返回值的情況下,將無法調用方法,所以將返回值類類型調整爲自己 Button類型,並增加 返回語名 return this;

public Button setListener(MouseListener l){

//在填加監聽器時,就對l進行賦值。

this.l = l ;

//是在使用方法鏈時使用

return this ;

 

}

/*

按鈕有單擊和雙擊的操作,也就是按鈕的方法,單擊或雙擊的實現其實是調用的監聽器的事件方法,那這裏的MouseListener其實就是一個接口。

*/

//public void click(){

//如果鏈式方法需要連續調用方法時,可以在調用的方法中也設定返回類型,並返回自己

public Button click(){

//調用傳入參數接口的方法

l.onClick();

return this;

}

//雙擊方法

public void dbClick(){

l.onDbClick();

}

}

 

//定義MouseListener接口

interface MouseListener{

//定義鼠標監聽器接口中的方法

public void onClick();

public void onDbClick();

public void onRightClick();

public void onMiddleClick();

}

//定義MouseAdapter抽象類(適配器模式),實現MouseListener接口,來減化創建按鈕對象時方法重用時的繁瑣程度。

abstract class MouseAdapter implements MouseListener{

//使用空實現的方法實現MouseListener接口中所有的方法,在使用時只作重寫即可。將不用重新實現接口中的所有方法

public void onClick(){}

public void onDbClick(){}

public void onRightClick(){}

public void onMiddleClick(){}

}

 

————————————————————————

 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章