類與對象[1]
- Java是面向對象的
- 匯編語言(面向機器)—— c語言(面向過程)—— java語言(面向對象)
- 類和對象的關系
- 類是抽象的倘零,代表一類事物板驳,比如人類饰潜,貓類...
- 對象是具體的,代表一個具體事物
類是對象的模板俄周,對象是類的一個個體星澳,實例
A[把貓的特征提取出來] --> B[貓類]
B --> C[對象/實例]
B --> D[對象/實例]
B --> E[...]
定義類
package包名疚顷;
class類名 extends父類 implements接口名{
成員變量;
構造方法;
成員方法腿堤;
}
成員變量
成員變量是類的一個組成部分阀坏,一般是基本數(shù)據(jù)類型,也可是是引用類型
創(chuàng)建對象
- 先聲明再創(chuàng)建
- 對象申明:
類名 對象名
- 對象創(chuàng)建:
對象名=new 類名()
- 對象申明:
- 一步到位法
對象名=new 類名()
訪問對象的成員變量
對象名.變量名;
成員方法
- 介紹
- 比如人類释液,除了有一些屬性外(成員變量表示的 年齡全释,姓名...)装处,還有一些行為误债,如說話,跑步...妄迁,通過學習還會做算術題
- 成員方法/函數(shù)--定義
- 參數(shù)列表:表示成員函數(shù)輸入
- 數(shù)據(jù)類型(返回類型):表示成員函數(shù)輸出
- 函數(shù)主體:表示為了實現(xiàn)某一功能代碼塊
public 返回數(shù)據(jù)類型 方法名(參數(shù)列表)
{
語句;//方法(函數(shù))主體
}
- 成員方法--申明
public int test(int a);
//訪問修飾符 數(shù)據(jù)類型 函數(shù)名(參數(shù)列表)寝蹈;
構造方法
- 特點
- 方法名和類名相同
- 沒有返回值
- 創(chuàng)建一個類的新對象時,系統(tǒng)會自動調(diào)用該類的構造方法登淘,完成對新對象的初始化
- 一個類可以有多個構造方法
- 默認構造方法
- 如果沒寫箫老,系統(tǒng)默認
public Person(){}
- 如果沒寫箫老,系統(tǒng)默認
- This
- this是屬于對象的,不是屬于類的
靜態(tài)變量與靜態(tài)方法
靜態(tài)變量
- 定義語法
訪問修飾符 static 數(shù)據(jù)類型 變量名;
//static表示靜態(tài)變量黔州,因此它可以被任何一個對象訪問
2)訪問類變量
類名.類變量名
//或者
對象名.類變量名
靜態(tài)方法
- 定義語法:
訪問修飾符 static 數(shù)據(jù)返回類型 方法名(){}
- 訪問類方法:
類名.類方法名
//或者
對象名.類方法名
- java規(guī)則:
- 靜態(tài)變量原則上用靜態(tài)方法去訪問
- 靜態(tài)方法只能訪問靜態(tài)變量
- 非靜態(tài)方法耍鬓,既能訪問靜態(tài)變量,也能訪問實例變量
- 總結:
- 靜態(tài)變量是與類相關的流妻,公共的屬性
- 實例變量是屬于每個對象個體的屬性
四大特征
1. 抽象(可以不考慮)
定義一個類時牲蜀,將一類事物的共同屬性和行為提取出來,形成一個物理模型绅这,這種研究方法稱為抽象
2. 封裝
將抽象出來的數(shù)據(jù)和對數(shù)據(jù)的操作封裝在一起涣达,數(shù)據(jù)被保護在內(nèi)部,程序的其他部分只有通過被授權的操作(成員方法)证薇,才能對數(shù)據(jù)進行操作
- 訪問控制修飾符
- 公開級別度苔,public,對外公開
- 受保護級別浑度,protected寇窑,對子類和同一個包中的類公開
- 默認級別,無修飾符箩张,向同一個包的類公開
- 私有級別甩骏,private,只有類本身可以訪問伏钠,不對外公開
訪問級別 | 訪問控制修飾符 | 同類 | 同包 | 子類 | 不同包 |
---|---|---|---|---|---|
公開 | public | √ | √ | √ | √ |
受保護 | protected | √ | √ | √ | |
默認 | 無 | √ | √ | ||
私有 | private | √ |
- 包
- 三大作用
- 區(qū)分相同名字的類
- 管理類
- 控制訪問范圍
- 打包命令
- package com.xiaoming
- 命名規(guī)范: 小寫字母
- 三大作用
3. 繼承
解決代碼復用:在父類中定義相同的屬性和方法横漏,所有的子類不需要重新定義這些屬性和方法,只需通過extends語句來聲明繼承
class 子類 extends父類
這樣子類就會自動擁有父類定義的部分屬性和方法
- 注意事項
- 除了 private屬性/方法熟掂,其他3類的屬性/方法都能被繼承
- 一個子類只能繼承一個父類
- Java所有類都是object的子類
- JDK6中有202個包缎浇,3777個類、借口赴肚、異常素跺、枚舉二蓝、注釋和錯誤
- 多查jdk幫助文檔
-
方法重載(overload)
- 方法名相同
- 方法的參數(shù)類型,個數(shù)指厌,順序至少有一項不同
- 如果只是返回類型不同刊愚,不能構成重載
- 如果只是控制訪問修飾符號不一樣,不能構成重載.
-
方法覆蓋(override)
- 子類的有一個方法踩验,和父類的某個方法的名稱鸥诽、返回類型、參數(shù)一樣箕憾,則稱子類的這個方法覆蓋了父類的那個方法
- 訪問權限只能:子類>=父類
4. 多態(tài)
一個引用(類型)在不同情況下的多種狀態(tài)牡借。
繼承是多態(tài)得以實現(xiàn)的基礎
- 注意事項
- Java允許父類的引用變量引用它子類的實例(對象)
Animal animal=new Cat();
這種轉換時自動完成的 - 好處:消除了類之間的耦合關系,使程序更容易擴展(見E:\Java\Homework\接口_賣汽車.txt)
- 新增一種類型汽車的銷售袭异,只需讓新定義的類實現(xiàn)Car并實現(xiàn)它的所有方法钠龙,無需對原有代碼做任何修改。CarShop類的sellCar(Car car)方法可以自動處理新的車型
- Java允許父類的引用變量引用它子類的實例(對象)
抽象類
當父類的一些方法不能確定時御铃,可以用abstract關鍵字來修飾該方法[抽象方法]碴里,用abstract來修飾該類[抽象類]
- 注意事項
- 抽象類不能被實例化
- 抽象類不一定要包含abstract方法,即可以有實現(xiàn)了的方法
- 一旦某個類包含了abstract方法上真,這個類必須聲明為abstract
- 抽象方法不能有主體:
abstract void aaa( );
接口
接口就是給出一些沒有內(nèi)容的方法咬腋,封裝到一起,到某個類要使用的時候谷羞,再根據(jù)具體情況把這些方法寫出來
Class 類名 implements 接口
{
方法帝火;
變量;
}
- 注意事項
- 接口不能被實例化
- 接口中的所有方法都不能有主體(可以理解為:接口是更抽象的抽象類)
void aaa();
- 一個類可以實現(xiàn)多個接口
- 接口中可以有變量(但變量不能用private和protected修飾)
- 接口中的變量湃缎,本質(zhì)是static犀填,而且是final,不管你加不加static修飾
- 在java開發(fā)中嗓违,我們經(jīng)常把常用的變量九巡,定義在接口中,作為全局變量使用蹂季。
訪問形式:接口名.變量名
- 一個接口不能繼承其他的類冕广,但是可以繼承別的接口
- 實現(xiàn)接口vs 繼承類
- 單繼承:保證類的純潔性
- 實現(xiàn)接口可以看作是對繼承的一種補充
- 繼承是層級式,不靈活
- 實現(xiàn)接口可以對某個類功能擴展偿洁,非常靈活
- 單繼承:保證類的純潔性
綁定
將一個方法調(diào)用同這個方法所屬的主體(也就是對象或類)關聯(lián)起來叫做綁定撒汉,分前期綁定和后期綁定
- 前期綁定
- 在程序運行之前就已經(jīng)綁定,由編譯器和連接程序實現(xiàn)涕滋,又叫做靜態(tài)綁定睬辐。比如static方法和final方法。注意!這里也包括private方法溯饵。因為它是隱式final的
- 后期綁定
- 在運行時根據(jù)對象的類型進行綁定侵俗,由方法調(diào)用機制實現(xiàn),因此又叫做動態(tài)綁定丰刊,或者運行時綁定隘谣。
final
- 作用:final可以修飾變量或者方法
- 當不希望父類的某個方法被子類覆蓋(override)時,可以用那個final關鍵字來修飾(見com.test2.Demo5.java)
- 當不希望類的某個變量的值被修改啄巧,也可用final修飾寻歧。如果一個變量是final的,則必須賦初值
- 當不希望類被繼承時棵帽,可用final修飾
- 規(guī)范:fianl用下劃線命名
- 注意事項
- final修飾的變量又叫常量熄求。一般用
xx_xx_xx
來命名 - 如果一個變量是final的渣玲,則必須賦初值
- final修飾的變量又叫常量熄求。一般用
-
持續(xù)更新中~筆記記錄自韓順平Java網(wǎng)課 ?