一,**塊
1)區域性**塊,寫在區域性方法中
2)構造**塊,寫在類中,優先於構造方法執行,屬於物件,可以進行物件呼叫
3)靜態**塊,寫在類中,屬於類,可以進行類名呼叫
**演示:
class codedemo
//靜態**塊
static{
}//優先執行 只執行一次 僅僅一次
}}
二,繼承
1)定義:就是說子類擁有父類的成員(但不是全部)
好處:減少**,提高效率,是類與類之間形成一種子類繼承父類的關係,這也產生了物件導向的第三大特點:多型
特點:單繼承,乙個子類只能繼承乙個父類,不能繼承多個。但是乙個父類可以有多個子類
雖然只能單繼承,但是可以多層次繼承 ,父類所擁有的成員,子類都可以擁有(不是全部)
繼承的體系:由於存在有個子類,可以提取子類的共性,形成父類,繼承父類
學習繼承體系的時候,學習頂層類,建立底層類的物件
當你分析實物的時候,發現這個實物是另乙個實物的一種,那就使用繼承
2)extends 關鍵字
意思是:擴充套件,延伸
繼承的定義格式: 子類 extends 父類 class a extends b
**演示:
實現繼承,父類和子類的成員方法的變化表現
*/class fu
}class so extends fu
}class extendsdemo1
}
三,繼承後,子類和父類的成員變數特點:
1)方法有,用自己的就近訪問原則
2)方法中沒有,那就使用本類的成員,就是子類的成員
3)如果子類沒有那就訪問父類的成員,父類沒有編譯失敗
4)super關鍵字,它表示的不是丟父類物件的引用,而是對父類儲存的呼叫,用來訪問父類成員
5)成員變數是靜態,就進行類名呼叫
**演示:
/*
實現繼承父類和子類的成員變數的變化表現
*/class fa
class so extends fa
}class extendsdome
}
四,繼承後,子類和父類的成員方法特點:
1)子類和父類中出現一模一樣的方法,子類的方法就重寫了父類的方法(override)保證子類的訪問許可權一定大於等於父類的訪問許可權
2)如何判斷是否重寫:
訪問許可權,靜態,返回值,引數
**演示:
/*
繼承後,子類,父類成員方法的特點
*/class fu
}class zi extends fu
*/ //降低了父類的許可權 private void show(){}
//不可以,父類方法非靜態 public static void show(){}
//可以編譯通過,不是重寫,父類方法無引數 public void show(int a){}
//編譯失敗,返回值型別不相容 public int show()
//編譯通過,父類方法過載 private double show(char c)、 }
class extendsdemo3
}
五,繼承後,子類和父類構造方法的特點:
1)子類所有的構造方法中,第一行是super();預設訪問父類的空引數構造方法
2)保證所有子類的構造方法都能訪問到父類的構造方法
3)如果父類中沒有空參的構造方法,那麼不在子類中學super();編譯失敗
4)this();和super();都要第一行,所以他們同事存在乙個構造方法中
**演示:
/*
**演示 構造方法中的不同
*/class a
*/ a(int i)
}class b extends a
b(int i)
}class extendsdemo2
}
六,final 關鍵字
1)修飾符,可以修飾類,叫最終類,不能被繼承
可以修成員方法,不能被子類的方法重寫
可以修飾區域性變數,被修飾的區域性變數不能再改變
可以修飾成員變數,固定的值不是預設值,是手動賦的,或者利用構造方法賦的,普通方法不行,應為構造在建立物件的過程,而普通方法已經建立物件,變數名全部大寫
七,多型中的型別轉換
1)父類 變數名=new 子類,這是乙個隱身轉型,由小的轉型到大的
2)呼叫子類的特有內容必訓強制轉換 格式 子類 變數=(子類)變數(是子類多型的變數)
3)類在強制轉換的時候,指的乙個引用,是不是指向乙個物件,如果不是就造成型別轉換異常,這時使用關鍵字 instanceof進
行比較運算, 格式: 引用型別 instanceof 類,執行結果是布林型別
**演示:
/*
養貓,寵物案例
繼承的思想,共性抽取
相同的成員變數,資料型別,名字
相同的成員方法,返回值,名字,引數列表
*///共性內容,吃的方法,抽取形成乙個父類
//animal是cat和dog的父類,最共性的內容
class animal
}class cat extends animal
public void catchmouse()
}class dog extends animal
public void lookhouse()
}class duotaidemo5
public static void eat(animal d)else if(d instanceof dog ) }}
八,多型的細節
1)除了非靜態成員方法編譯看父類,執行看字類,其它都是編譯看父類,執行也看父類
**演示:
九,抽象類/*
多型在編譯時期的細節
*/class a
}//除了 非靜態的成員方法 是執行的子類的 其他都是父類的 如果沒有就編譯不過去
class b extends a
}class duotaidome4
}
1)抽象方法:當說不清,道不明的時候,發現方法沒有實際的意思,就使用抽象方法
定義格式:使用 abstract 修飾符 anstract viod 方法名();這裡一定不能寫大括號,否則編譯失敗,抽象方法,必需存
在於抽象類中,所以類名前必須加 abstract 修飾,否則編譯失敗
用法:抽象類不能例項化,只能讓子類繼承,重寫抽象方法,建立子類物件,如果子類只重寫了部分抽象方法或者沒有重寫抽
象方法,那子類還是乙個抽象類
特點:a)抽象類,中有構造方法,應為每個類中必須有構造方法
b)抽象類中可以有普通方法,子類繼承後可以直接使用
c)抽象類中可以有靜態方法,直接類名呼叫
d)抽象類中可以沒有抽象方法,應為抽象類,不可以例項化
十,anstract 的不可以和那些關鍵字並存
1)final,抽象方法必須讓子類重寫 final,不能被繼承
2)private,抽象方法必須讓子類重寫,私有了,不能被繼承
3)static,可以直接類名呼叫,但是抽象類中沒有方法體
十一,模版方式
獲得乙個程式從開始到結束的執行時間,呼叫system類的方法
**演示:
/*
利用抽象方法 實現乙個程式開始到結束的執行時間
*/abstract class gettime
public abstract void code();//暴露乙個方法,等待子類的重寫
}class a extends gettime }}
class b extends gettime }}
class demotest6
}
黑馬程式設計師 物件導向學習
1.類 物件。人 是類,張三 是 人 這個類的物件。類是抽象的,物件是具體的。按鈕就是類,某個按鈕就是物件。物件可以叫做類的例項 instance 類就像int,物件就像10。欄位field 和某個物件相關的變數 字段就是類的狀態。人這個類有姓名 年齡 身高等字段。類不佔記憶體,物件才佔記憶體。2....
黑馬程式設計師 物件導向
物件導向 1 物件導向 是基於面向過程的一種思想。面向過程 以函式為基礎,關注實現過程。物件導向 以物件為基礎,關注實現結果。2 物件導向的思想特點 a 是一種更符合人們思考習慣的思想。b 把複雜的事情簡單化了。c 把我們從執行者變成了指揮者。舉例 買電腦。洗衣,做飯。旅遊。把大象裝進冰箱。體現 c...
黑馬程式設計師 物件導向
物件導向是一種思想,把複雜事物簡單化,把面向過程的執行者變成了指揮者。過程其實就是函式,而物件將函式和一些內容封裝。把事物的屬性和行為封裝成物件,再把物件抽象成類。類的訪問修飾符有public和final。而成員的修飾符有public private protected static 成員變數和區域...