回顧
--------------------------------
class:類成員
構造函數:和類同名,無返回值。可以重載
第一條語句 this()(調自身) 或 super()(調超類構造) 默認是super(),超類無空構造 要super中要指定構造函數的參數。
成員變量:修飾符 private public final
成員函數
靜態成員:跟類有關,存在方法區
靜態代碼塊: 類加載時執行
構造代碼塊:{} 在創建對象時執行,每創建一個對象執行一次
抽象類:用abstract 修飾的類,不能用於創建對象,一定有構造函數
抽象方法:無方法體,用abstract修飾,用途:爲了讓子類便於實現。只能放在抽象類中。
final:最終的 修飾 類:不能繼承
方法:不能重寫 不能覆蓋
變量:不能重新賦值,爲常量
內部類: 定義在類內部的類,可定義在成員位置上
定義在方法中
內部類名存成文件 的格式:
定義在類中:外部類名$內部類名.class
定義在方法中:外部類名$序號內部類名.class
繼承:extends
單重繼承,可多層繼承
JVM
-------------------------------
方法區:
棧區:調整大小 java -Xss
堆區:對象太多了, java -Xms java -Xmx
=========================================================
接口 : 經編譯後也是生成class文件,但是用interfaec修飾的類
----------------------
格式:interface{ }
成員修飾符是固定的
成員變量:public static final
成員函數:public abstract 說明接口中的所有方法都是抽象的。
發現接口中的成員都是public的
接口的出現將“多繼承”通過另一種形式體現出來,即“多實現”
接口常用形容詞來命名。
接口的特點:
-------------------------------
接口是對外暴露的規則
接口是程序的功能擴展
接口的出現降低耦合性
接口可以用來多實現
類與接口之間是實現關係,而且類可以繼承一個類的同時實現多個接口。
接口與接口之間可以有繼承關係,可以繼承多個接口
接口的主要用作用是類與類、對象與對象之間的交互問題上
示例:
-------------------------------------------------------
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(){}
}
————————————————————————