JAVA面向對象
包:
JAVA中,使用包來管理類,就像在資源管理器中使用文件來管理文件一樣
在同一個包中,類名不能重名,在不同包中類名可以相同
將會涉及的包:
-
java.lang
- java語言的基礎包,系統會自動導包
-
java.util
- 工具包
-
java.io
- 輸入輸出相關的類
-
java.text
- 文本處理相關的類
-
java.net
- 網絡相關的類
-
java.math
- 數學相關的類
使用package關鍵字定義包,package定義包的語句必須作爲源文件的第一條語句
包的命名規範:
- 公司的域名倒敘.項目包.模塊名.子模塊名
使用其他的類:
-
import #.#.*;
- 把被使用的類導入當前文件中,再使用簡易類名調用
-
需求:
- 使用其他包中的類
-
前提:
- 被使用的類必須定義爲public修飾的公告類
-
使用方式:
- 1、使用import導入,再通過簡易類名訪問
- 2、直接使用完整類名
類:
類訪問權限:
-
類的訪問權限:
-
公共類
- 使用public修飾的類就是公共類
-
非公共類
-
-
公共的使用場景:
- 如果這個類想在其他包中使用,需要定義爲公共類;如果這個類沒有使用public修飾,這個類只能在當前包中使用(即使導入也不可使用)
類成員的訪問權限:
訪問權限遵循最小化原則
想在任意位置訪問就定義爲public公共的
在當前類和派生類中可直接訪問定義爲protected受保護的
Object:
(java中所有類的根父類,java中的類要麼直接繼承object,要麼間接繼承object)
java中的類的繼承是可傳遞的,object類中定義的方法,所有的類都能繼承到
clone()
- 對象克隆(很少使用)
equals()
-
用於判斷兩個對象的內容是否一樣
- 使用關係運算符==判斷兩個引用名稱是否相等,如果兩個變量相等,說明這兩個變量中的引用堆中的同一個對象
- 如果想要判斷兩個對象中的內容(即各個成員變量的值)是否一樣,需要重寫equals()方法。根據哈希約定,如果兩個對象的equals()相等,那麼這兩個對象的hashCode()也應該相等,即在重寫equals()方法的同時,也要重寫hashCode()
finalize()
- 當對象被垃圾回收時,會執行對象的finalize()方法,但是世界不確定,一般不用
getclass()
- 返回對象的運行時類對象,簡單理解爲返回對象的類的字節碼文件
hashCode()
- 返回對象的哈希碼
notifyAll()
notify()
- 在線程中用於喚醒等待中的線程
toString()
-
把對象轉化爲字符串
- 打印對象println(#)時,會調用對象toString方法,當打印對象時,想顯示對象的各個屬性
wait()
- 在多線程中,讓線程等待
JAVA Bean的一般寫法:
定義實體類:
- 1、一般把所有字段私有化,提供公共的get/set方法,對字段進行訪問
- 2、一般會提供無參構造
- 3、一般需要重寫toString、equals/hashCode
接口的應用:
1、使用接口用來封裝功能操作
- 如在FlyAble()接口中封裝了fly飛行功能,在SwimmAble()接口中封裝swimm游泳功能
2、接口可以定義一組操作規範:
- 如開發某個新項目時,在相似模塊中有一些操作是相同的,可以把這一組相同的操作封裝在一個接口中,就相當於通過接口定義了一個操作規範
提倡面向接口編程:
-
1、接口使用比較靈活,一個類在繼承父類的同時,可以實現多個接口
-
2、接口比較容易擴展,接口引用可以賦值各種實現類對象,經常把接口作爲方法形參,在調用方法時,可以傳遞各種實現類對象
-
3、接口可以使項目分層
接口與抽象類的異同點:
同:
- 1、都可以定義爲抽象方法
- 2、都不能實例化對象
- 3、定義的抽象方法都需要被重寫
- 4、都可以定義public static方法,public static final常量
異:
-
1、意義不同
- 抽象類是對事物更高層級的抽象
- 接口是對功能方法的封裝
-
2、定義方法不同
- 抽象類用abstract定義
- 接口使用interface定義
-
3、內容不同
- 抽象類中除了抽象方法外,還可以定義構造方法等普通類中定義的所有成員,接口除了抽象方法等這四個內容外,不能定義構造方法等內容(三方一常量)
-
4、使用方式不同
-
抽象類需要被子類繼承
- extends
-
接口需要被實現類實現
- implements
-
-
5、類支持單繼承,接口支持多繼承
-
6、應用場景不同
- 一般情況下,對類進行功能的擴展,優先選擇接口
- 除了功能擴展外,還需要保存不同的數據,只能選擇抽象類;抽象類的抽象方法需要子類重寫,抽象類還可以約束所有子類都具有相同的功能
接口:
1、定義與接口:
-
電腦上的接口有哪些?
- USB接口、耳機接口……
-
java中的接口就是功能的封裝,用來擴展類的功能
-
接口也可以理解爲一組操作規範,或者是一個協議
-
如何定義接口:
-
語法格式:
- [修飾符] interface 接口名 {
void fly(); //功能,用方法表示,接口中的方法默認使用public abstract修飾,沒有方法體
-
}
-
如何使用接口?
-
語法格式:
- class 類名 implements 接口名{
@Overwrite
void fly(){# //重寫接口中的抽象方法
}
-
}
2、接口說明:
- 1、接口中方法默認使用public abstract修飾,接口還可以定義爲public static final 常量,public方法,public default方法(如果使用default修飾,可以有默認的方法體,可重寫或不重寫)
- 2、類實現了接口,需要重寫接口的抽象方法,如果沒有重寫接口中所有的抽象方法,實現類需要定義爲抽象類
- 3、接口是一種引用數據類型,可以定義變量,但是接口不能實例化對象,接口引用需要賦值實現類對象,或者接口的匿名內部類對象
- 4、接口多態,接口引用調用接口中抽象方法,實際上執行的是實現類對象的方法
- 5、一個類可以同時實現多個接口,需要重寫所有接口的所有接口的所有抽象方法
- 6、接口也支持繼承,接口支持多繼承
抽象類:
1、對一組對象進行更高層級抽象時,形成抽象類,就可以定義爲抽象類
2、含有抽象方法的類必須定義爲抽象類
-
2.1、爲什麼定義抽象類?
- 對事物進行進一步抽象可以形成抽象類
- 含有抽象方法的類必須定義爲抽象類
-
2.2如何定義抽象類?
- 使用abstract修飾類
-
2.3爲什麼定義抽象方法?
- 當一個類的某個操作無法具體實現時,這個操作可以定義爲抽象方法
- 使用abstract修飾方法,只有方法的聲明,沒有方法體
-
2.4如何使用抽象類?
-
抽象類一般作爲其他的父類存在
-
子類繼承了抽象類,子類需要重寫抽象類中的所有抽象方法,如果子類沒有重寫所有的抽象方法,則子類也需要定義爲抽象類
-
注意:
- 抽象類中不一定含有抽象方法
-
-
2.5抽象類不能實例化對象,需要賦值子類對象
- 抽象父類 # = new 子類()
-
2.6抽象類的引用可以直接匿名內部類對象
- 子主題 1
final關鍵字:
可修飾:
-
類
- 表示該類是最終類,不能被繼承
- System、String、Scanne就是final修飾的類
-
字段
- 字段(Field),也叫做成員變量,包括實例變量與靜態變量兩大類
- final修飾的字段必須顯示的賦值,經常在定義final字段的同時就賦值,也可在構造方法中賦值
- final修飾的字段不可再重新賦值
- 一般情況下與static都是同時使用的,final字段所有字母都是大寫,稱爲final常量
-
方法
- 最終方法,不能被子類重寫(覆蓋),能被子類繼承
-
局部變量
- 一律初始化就不要再修改,final修飾引用類型變量,是指這個引用類型變量不能再指向其他對象,可以修飾它的屬性
-
形參
- 在方法中不能修改final形參的值