Java面向對象
**面向對象三大特征:**
繼承
封裝
多態(tài)?
OOA(面向對象的分析)
OOD(面向對象的設計)
OOP(面向對象的編程)
類==屬性 方法
屬性來源于類的狀態(tài),方法來源于動作
**類的定義**
public class Student{
int id;?? ??? ??? ?//成員變量
// id是對象級別的,必須先有對象才能訪問;不能直接使用類訪問
String name;
boolean sex;
String adress;
}
創(chuàng)建對象
java中所有new出來的數據統(tǒng)一被儲存在堆中,程序猿無法對堆區(qū)數據直接操作,只能通過內存地址間接操作
成員變量在堆中的對象中存儲
/*
關于系統(tǒng)默認值
基本數據類型
byte,short,int , long ? ? 0
float , double ? ? 0.0
boolean false
char ?\u0000
引用數據類型:null
*/
?面向對象的封裝性指的是:
1.屬性私有化
2.對外提供公開的setter ? ?getter
set get 方法的方法名必須應該遵循規(guī)范
?
**構造函數(構造方法,構造器,Constructor)**
1.構造方法語句:
【修飾符列表】構造方法名(形式參數列表){
方法體;
}
2.構造方法的方法名必須和類名一致
3.構造方法的作用?
第一,創(chuàng)建對象
第二,給成員變量賦值(初始化成員變量)
4.構造方法應該如何調用?
new ?構造方法名(實參);在堆中開辟空間儲存對象
5.如果一個類沒有提供任何構造方法,系統(tǒng)默認提供無參數構造方法
如果一個類已經手動的提供了構造方法,那么系統(tǒng)不會再提供任何構造方法
6.成員變量到底什么時候賦值?
只有在調用構造方法的時候,才給成員變量賦值
構造方法和普通方法一樣可以重載,構造方法不具有任何返回值類型,即沒有返回值,不能有void
對象沒有更多的引用指向,則變成垃圾
**this關鍵字**
1.this是什么?
this是一個引用類型
在堆中的每一個java對象上都有this
this保存內存地址指向自身
2.this能用在哪些地方?
第一,this可以用在成員方法中
第二,this可以用在構造方法中
語法:this(實參);
通過一個構造方法去調用另一個構造方法
目的:代碼重用;
this(實參);必須出現在構造方法中的第一行
this可以區(qū)分成員變量和局部變量
this不能用在靜態(tài)方法中
靜態(tài)方法的執(zhí)行根本不需要Java對象的存在,直接使用類名.的方式訪問
而this代表的是當前對象,所以靜態(tài)方法中根本沒有this
**static關鍵字**
1.static修飾的變量叫“靜態(tài)變量”
2.static修飾的方法叫“靜態(tài)方法”
3.static還可以定義靜態(tài)語句塊
static定義的靜態(tài)語句塊在類加載階段執(zhí)行,并且只執(zhí)行一次,是自上而下的順序的執(zhí)行
關于實例語句塊
每一次調用構造方法之前會執(zhí)行一次
實例語句塊執(zhí)行順序也是自上而下
? ?
一般情況下工具類中的方法大部分都是靜態(tài)方法
靜態(tài)方法不用創(chuàng)建對象也能直接訪問該方法?
空的引用去訪問成員的時候會出現空指針異常
靜態(tài)方法可以使用“類名.”方式調
用,也可以使用“引用.”,即使用的是“引用.”,底層還是用的“類名.”
**單利模式要領:**
1.構造方法私有化
2.對外提供一個公開的靜態(tài)的獲取當前類型對象方法
3.提供一個當前類型的靜態(tài)變量 ?
**類的繼承**
引用類的最基本的作用的是:代碼重用
語法:
【修飾符列表】class子類名 extends ?父類名{
類體
}
Java中,;類于類只能單繼承
一個類如果沒有顯示繼承其他類,則類默認繼承Object,
Object是Java中的根類
Java語言中子類繼承父類,會將父類中所有的數據全部繼承,包括私有的,
但是在子類中無法直接訪問父類中的私有的數據,但可以間接訪問
注意:構造方法無法被子類繼承
**方法的覆蓋**
1.什么時侯方法需要重寫?
? ?? ?如果父類中的方法已經無法滿足當前子類的業(yè)務的需求,需要將父類中的方法進行重寫
2.子類如果重寫父類中的方法之后,子類對象一定調用的是重寫之后的方法
3.發(fā)生方法覆蓋的條件:
第一;發(fā)生在具有繼承關系的兩個類之間
第二;必須具有相同的方法名;相同的返回值類型;相同的參數列表
第三;重寫的方法不能比被重寫的方法擁有更低的訪問權限?
第四;重寫的方法不能比被重寫的方法拋出更寬泛的異常(異常機制)
第五;私有的方法不能被覆蓋
第六;構造方法無法被覆蓋,因為構造方法不能被繼承
第七;靜態(tài)的方法不存在覆蓋
第八;覆蓋指的是成員方法,和成員變量無關
4.繼承最基本的作用:代碼重寫;
? ?繼承最重要的作用:方法可以重寫
?**多態(tài)**
Java中向上轉型和向下轉型
1.向上轉型(upcasting);子---------》父、
2.向下轉型(downcasting);父-------》子;
注意:無論是向上轉型還是向下轉型,兩個類之間必須要有繼承關系
多態(tài)的作用:
1.使用多態(tài)可以使代碼的耦合度降低
2.項目的擴展能力增強
super關鍵字
1.super不是引用類型,super中儲存的不是內存地址,super指向的不是父類對象
2.super代表的是當前子類對象中的父類型特征
3.什么時候使用super?
子類和父類中都有某個數據,如果要在子類中訪問父類中的屬性,需要使用super
4.super可以用在什么地方?
第一;super可以用在成員方法中,不能用在靜態(tài)方法中
第二;super可以用在構造方法中
單例模式缺點:無法被繼承
1.構造方法私有化
final關鍵字 ?
1.final修飾的類無法被繼承
2. ? ? ? ? ? ? ? ? 方法
?3.final修飾的局部變量,一旦被賦值,不可被改變
4.final修飾的成員變量必須手動初始化
5.final 修飾的成員變量一般和static聯用
**抽象類**
1. 如何定義抽象類?
class關鍵字前加abstract
2.抽象類無法被實例化
抽象類無法創(chuàng)建對象
3.雖然抽象類沒有辦法實例化,但是抽象類也有構造方法,該構造方法是給子類創(chuàng)建對象用的
4.抽象類中可以定義抽象方法
抽象方法的語法:在方法的修飾符列表中添加abstract關鍵字,并且抽象方法應該以 “ ; ”結束,不能帶有“{ ?}”
例如;public abstract void ?m1();
5.抽象類中不一定有抽象方法,但是抽象方法必須出現在抽象類中;
6.一個非抽象的類繼承抽象類,必須將抽象類中的抽象方法覆蓋,實現,重寫
抽象類不能被final修飾
抽象方法不能被final修飾
final修飾的引用類型,該引用不可再重新指向其他的Java對象
但是final修飾的引用,該引用指向的對象的屬性是可以修改的
?