Java學習筆記(二)——封裝、繼承、多態

一、封裝

概念:

將類的某些信息隱藏在類內部,不允許外部程序直接訪問,而是通過該類提供的方法來實現對隱藏信息的操作和訪問。

實現步驟:

修改屬性的可見性——設爲private。

創建getter/setter方法——用於屬性的讀寫。

在getter/setter方法中加入屬性控制語句——對屬性值的合法性進行判斷。

包:

作用:

管理Java文件;解決同名文件衝突。

定義名:

package 包名

必須放在Java源程序的第一行,包名間可以用“.”隔開。

系統中的包:

java.(功能).(類)

java.lang.(類)——包含Java語言基礎的類

java.util.(類)——包含Java語言中各種工具類

java.io.(類)——包含輸入、輸出相關功能的類

包的使用:

(1)import 包名

(2)Java中包的命名規範是全小寫字母拼寫

(3)~~.*——加載其下所有文件

訪問修飾符:

可以修飾屬性和方法的訪問範圍。

訪問修飾符 本類 同包 子類 其他
private      
默認    
protected  
public







this關鍵字:

1、this關鍵字代表當前對象。 this.屬性——操作當前對象的屬性。this.方法——調用當前對象的方法。
2、封裝對象屬性的時候,經常會使用this關鍵字。

內部類:

定義:

內部類(Inner Class)就是定義在另外一個類裏面的類。與之對應,包含內部類的類被稱爲外部類。

作用:

1、內部類提供了更好的封裝,可以把內部類隱藏在外部類之內,不允許同一包中的其他類訪問該類。
2、內部類的方法可以直接訪問外部類的所有數據,包括私有的數據。

分類:

成員內部類、靜態內部類、方法內部類、匿名內部類。
****要使用內部類的方法時,首先創建一個外部類對象,通過 外部類對象.new 內部類() 形式創建內部類對象,最後調用內部類方法。****

成員內部類(普通內部類):

1、定義了成員內部類後,必須使用外部類對象來創建內部類對象,而不能直接去new一個內部類對象,即:內部類 對象名=外部類對象.new 內部類();
2、成員內部類的.class文件:外部類名$內部類名.class
3、如果外部類和內部類具有相同的成員變量或方法,內部類默認訪問自己的成員變量或方法,如果要訪問外部類的成員變量或方法需使用this關鍵字(外部類.this.成員變量/方法)。

靜態內部類(static修飾的內部類):

1、靜態內部類不能直接訪問外部類的非靜態成員,但可以通過 new 外部類().成員 的方式訪問。
2、若外部類的靜態成員和內部類的成員名稱相同,可通過 類名.靜態成員 訪問外部類的靜態成員;若不相同,則可通過 成員名 直接調用外部類的靜態成員。 3、創建靜態內部類對象時,不需要外部類的對象,直接“內部類 對象名=new 內部類(); ”

方法內部類(內部類定義在外部類的方法中,方法內部類只在該方法內可以使用):

1、方法內部類不能使用訪問控制符和static修飾符。

二、繼承(類與類的一種關係,Java中的繼承是單繼承)

優勢:

子類擁有父類的所有屬性和方法(private修飾的無效);實現代碼複用。

語法規則:

class 子類 extends 父類

方法的重寫:

如果子類對繼承父類的方法不滿意,是可以重寫父類繼承的方法的,當調用方法時會優先調用子類的方法。返回值類型、方法名、參數類型和個數都要與父類的方法相同才叫方法的重寫。

繼承的初始化順序:

初始化父類再初始化子類;先執行初始化對象中屬性,再執行構造方法中的初始化。

final關鍵字:

final可以修飾類、方法、屬性和變量。
final修飾類,則該類不允許被繼承。
final修飾方法,則該方法不能被重寫。
final修飾屬性,則該類的屬性不會進行隱式的初始化(類的初始化屬性必須有值)或在構造方法中賦值(但只能選其一)。
final修飾變量,則該變量的值只能賦一次值,即變爲常量。

super關鍵字:

在對象的內部使用,可以代表父類對象。
訪問父類的屬性:super.age
訪問父類的方法:super.eat()
如果子類構造方法中既沒有顯式調用父類的構造方法,而父類中又沒有無參的構造方法,則編譯出錯。

object類:

object類是所有類的父類,如果一個類沒有使用extends關鍵字明確標識繼承另外一個類,那麼這個類默認繼承object類。
tostring()方法:返回對象的哈希碼(對象地址字符串),可以通過重寫tostring()方法表示出對象的屬性。
equals()方法:比較的是對象的引用是否指向同一個內存地址。一般情況下比較兩個對象時比較的是值是否一致,所以要進行重寫。

三、多態(繼承是多態的實現基礎)

對象的多種形態:

1、引用多態:

父類的引用可以指向本類/子類的對象。

2、方法多態:

創建本類對象時,調用的方法爲本類方法。
創建子類對象時,調用的方法爲子類重寫的方法或者繼承的方法。

引用類型轉換:

1、向上類型轉換(隱式/自動類型轉換),是小類型到大類型的轉換。
2、向下類型轉換(強制類型轉換),是大類型到小類型的轉換。
3、instanceof運算符,來解決引用對象的類型,避免類型轉換的安全性問題。

抽象類(abstract class):

1、語法定義:

抽象類前用abstract關鍵字修飾,則該類爲抽象類。

2、應用場景:

a、某些情況下,某個父類只知道其子類應該包含怎樣的方法,但無法準確知道這些子類如何實現這些方法。
b、從多個具有相同特徵的類中抽象出一個抽象類,以這個抽象類作爲子類的模板,從而避免了子類設計的隨意性。

3、作用:

限制規則子類必須實現某些方法,但不關注實現細節。

4、使用規則:

a、abstract定義抽象類。
b、abstract定義抽象方法,只是聲明,不需要實現。
c、包含抽象方法的類是抽象類。
d、抽象類中可以包含普通的方法,也可以沒有抽象方法。
e、抽象類不能直接創建,可以定義引用變量。

接口:

1、接口概念:

接口可以理解爲一種特殊的類,由全局常量和公共的抽象方法所組成。類是一種具體實現體,而接口定義了某一批類所需要遵守的規範,接口不關心這些類的內部數據,也不關心這些類裏方法的實現細節,它只規定這些類必須提供某些方法。

2、接口定義:

和類定義不同,定義接口不再使用class關鍵字,而是使用interface關鍵字。
[修飾符] abstract interface 接口名[extends 父接口1,父接口2...]
{
零個到多個常量定義...
定個到多個抽象方法的定義...
}
接口就是用來被繼承,被實現的,修飾符一般是public,不能使用private和protected修飾接口。
接口中的方法都是抽象方法。
接口中方法不能有方法體。//void geta();

3、使用接口:

一個類可以實現一個或多個接口,實現接口使用implements關鍵字。Java中一個類只能繼承一個父類,是不夠靈活的,通過實現多個接口可以做補充。
繼承父類實現接口的語法爲:
[修飾符] class 類名 extends 父類 implements 接口1,接口2...
{
類體部分//如果繼承了抽象類,需要實現繼承的抽象方法;要實現接口中的抽象方法
}
如果要繼承父類,繼承父類必須在實現接口之前。
接口在使用過程中經常與匿名內部類配合使用。
匿名內部類就是沒有名字的內部類,所用於關注實現而不關注實現類的名稱。
Interface i=new Interface()
{
public void method(){
~~
}
}

四、UML

Unified Modeling Language(統一建模語言/標準建模語言)是一種支持模型化和軟件系統開發的圖形化語言,爲軟件開發的所有階段提供模型化和可視化支持。
常用UML圖——用例圖、序列圖、類圖
常用建模工具——Visio、Rational Rose、PowerDesign
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章