一竿屹、什么是面向?qū)ο?/h1>
- 萬物皆對象。
- 對象就是一個概念柒巫,把所有的事物都稱作為“對象”(沒有不是對象的東西)
- 屬性就是該事物的組成部分刷袍,所有可以被包含的部分都稱為“屬性”(沒有不含屬性的對象)
- 方法就是達成目標的途徑,所有可行性的行為都成為方法(沒有不存在方法的對象和屬性妓布,但是可以選擇使用哪些方法)
- 舉例:比如把人看成是一個對象姻蚓,那么姓名,性別秋茫,生日等則是人這個對象的屬性史简,吃飯,睡覺等行為就是人這個對象的方法。
二圆兵、類與對象
- 類:類是一種分類跺讯,一個類別,一個模板殉农,它描述一類對象的行為和狀態(tài)刀脏,是一組具有相同特性(屬性)與行為(方法)的事物集合
- 對象:是一個個體的特征,是類的一個實例超凳,有狀態(tài)和行為
- 類是對象的抽象(模板Class)愈污,對象是類的具體
三、構造方法
構造方法:方法的重載轮傍,對屬性進行初始化操作暂雹,構造方法名稱與類名相同,沒有返回值聲明(包括 void)
(1)無參構造
public User() {
}
(2)有參構造
public User(String username) {
this.username = username;
}
- 每一個類中都會有一個默認的無參構造方法
- 如果手動定義了一個有參構造创夜,則默認的無參構造無效杭跪,還需手動再加一個無參構造。
(3)單例模式
構造方法私有化驰吓,讓除了自己類能創(chuàng)建外其他地方都不可以創(chuàng)建
- 在自己的類中創(chuàng)建一個單實例(飽漢模式一出來就創(chuàng)建單實例涧尿,饑漢模式需要的時候才 創(chuàng)建)
- 提供一個方法獲取該實例對象(饑漢模式創(chuàng)建時需要進行方法同步)
- 代碼體現(xiàn):
//餓漢式
class Single{
private Single(){} //私有化構造函數(shù)。
private static Single s = new Single(); //創(chuàng)建私有并靜態(tài)的本類對象檬贰。
public static Single getInstance(){ //定義公有并靜態(tài)的方法姑廉,返回該對象。
return s;
}
}
//懶漢式:延遲加載方式翁涤。
class Single2{
private Single2(){}
private static Single2 s = null;
public static Single2 getInstance(){
if(s==null)
s = new Single2();
return s;
}
}
四桥言、對象的創(chuàng)建
new 對象 例如:User user new User();
- new關鍵字:表示向內(nèi)存申請空間,也表示實例化一個對象迷雪,創(chuàng)建一個對象限书。
- 棧存放引用
-
堆存放具體的對象
五、封裝
封裝:屬性私有化章咧,提供get,set方法
- 好處:將變化隔離倦西;便于使用;提高重用性赁严;安全性
- 封裝原則:將不需要對外提供的內(nèi)容都隱藏起來扰柠,把屬性都隱藏,提供公共方法對其訪問疼约。
- 代碼提現(xiàn):
public class User {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
六卤档、繼承
繼承:如同生活中的子女繼承父母擁有的所有財產(chǎn),程序中的繼承是指子類擁有父類數(shù)據(jù)結構的方法和機制程剥,這是類之間的一種關系劝枣;繼承只能是單繼承。
好處:
1:提高了代碼的復用性。
2:讓類與類之間產(chǎn)生了關系舔腾,提供了另一個特征多態(tài)的前提溪胶。
- extends關鍵字
- 子類擁有父類的全部特性
- 繼承只能是單繼承
方法重寫(override):相對繼承而言,子類中對父類已經(jīng)存在的方法進行區(qū)別化的修改稳诚。
this:代表是本類類型的對象引用
super:代表是子類所屬的父類中的內(nèi)存空間引用哗脖。
代碼提現(xiàn):
public class User {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
public class Admin extends User{
@Override
public String getName() {
return super.getName();
}
}
七、多態(tài)
多態(tài):父類的引用指向子類的對象 例如:Person person = new Student();
- 多態(tài)前提
A:存在著繼承或者實現(xiàn)關系
B:有方法的重寫
C:父類(接口)引用指向子類(實現(xiàn))對象 - 好處:多態(tài)的存在提高了程序的擴展性和后期可維護性
instanceof:作用是測試它左邊的對象是否是它右邊的類的實例
- 在寫程序的時候扳还,如果要進行類型轉換才避,我們最好使用instanceof運算符來判斷它左邊的對象是否是它右邊的類的實例,再進行強制轉換
八氨距、接口
接口:當一個類中的方法都是抽象的時候桑逝,java提供了另一種表示方式,叫接口衔蹲。接口是一系列方法的聲明肢娘,是一些方法特征的集合呈础。
- 用interface關鍵字表示舆驶。類與接口關系用implements表示。
- 約束:只能定義方法名而钞,而沒有方法體
- 子類實現(xiàn)接口沙廉,必須重寫其中的方法
- 只有一個方法的接口叫做函數(shù)式接口,可以使用lambda表達式簡化
- 接口比抽象類更抽象
- 一個類可以實現(xiàn)多個接口
- 代碼提現(xiàn):
public interface USB {
void read();
void write();
}
public class YouPan implements USB {
@Override
public void read() {
System.out.println("U盤正在通過USB功能讀取數(shù)據(jù)");
}
@Override
public void write() {
System.out.println("U盤正在通過USB功能寫入數(shù)據(jù)");
}
}
九臼节、內(nèi)部類
內(nèi)部類:將一個類定義在另一個給類里面或者方法里面撬陵,這樣的類就被稱為內(nèi)部類。
內(nèi)部類可以分為四種:成員內(nèi)部類网缝、局部內(nèi)部類巨税、匿名內(nèi)部類、靜態(tài)內(nèi)部類
(1)成員內(nèi)部類:成員內(nèi)部類是最普通的內(nèi)部類粉臊,它的定義為位于另一個類的內(nèi)部
- 成員內(nèi)部類無條件訪問外部類的屬性和方法
- 外部類中如果要訪問成員內(nèi)部類的成員草添,必須先創(chuàng)建一個成員內(nèi)部類的對象,再通過指向這個對象的引用來訪問
(2)局部內(nèi)部類:定義在一個方法或者一個作用域里面的類扼仲,它和成員內(nèi)部類的區(qū)別在于局部內(nèi)部類的訪問僅限于方法內(nèi)或者該作用域內(nèi)远寸。
(3)匿名內(nèi)部類:應該是平時我們編寫代碼時用得最多的,在編寫事件監(jiān)聽的代碼時使用匿名內(nèi)部類不但方便屠凶,而且使代碼更加容易維護
- 代碼提現(xiàn):
public class Test {
public static void main(String[] args) {
driveCar(new Car(){
@Override
public void drive() {
System.out.println("駕駛著BMW汽車");
}
});
}
public static void driveCar(Car car){
car.drive();
}
}
interface Car {
void drive();
}
- 分析以上代碼知道靜態(tài)方法driveCar需要一個Car對象驰后,我們通過實現(xiàn)接口創(chuàng)建一個匿名類對象傳遞過去。事實上還可以通過繼承類來創(chuàng)建一個匿名內(nèi)部類對象矗愧。
- 注意事項:匿名內(nèi)部類沒有構造方法灶芝。也是唯一沒有構造方法的內(nèi)部類。匿名內(nèi)部類和局部內(nèi)部類只能訪問外部類的final變量。
(4)靜態(tài)內(nèi)部類:是定義在另一個類里面的類夜涕,只不過在類的前面多了一個關鍵字static颤专。靜態(tài)內(nèi)部類是不需要依賴于外部類的。
- 靜態(tài)內(nèi)部類和成員內(nèi)部類相比多了一個static修飾符
- 因為外部類加載時只會加載靜態(tài)域钠乏,所以靜態(tài)內(nèi)部類不能使用外部類的非靜態(tài)變量與方法
內(nèi)部類的好處:
- 完善了Java多繼承機制栖秕,由于每一個內(nèi)部類都可以獨立的繼承接口或類,所以無論外部類是否繼承或?qū)崿F(xiàn)了某個類或接口晓避,對于內(nèi)部類沒有影響簇捍。
- 方便寫事件驅(qū)動程序。