1、封裝 (1)概念 將類的某些信息隱藏在類的內部,不允許外部程式直接訪問,而是通過該類提供的方法來實現對隱藏信息的操作和訪問。 (2)封裝的實現步驟 2、Java中的訪問修飾符 3、繼承 (1)Java中是單繼承 (2)繼承的好處: (1)子類擁有父類的所有屬性和方法 (2)實現代碼復用 (3)繼 ...
1、封裝
(1)概念
將類的某些信息隱藏在類的內部,不允許外部程式直接訪問,而是通過該類提供的方法來實現對隱藏信息的操作和訪問。
(2)封裝的實現步驟
2、Java中的訪問修飾符
3、繼承
(1)Java中是單繼承
(2)繼承的好處:
(1)子類擁有父類的所有屬性和方法
(2)實現代碼復用
(3)繼承的語法規則:
(4)方法重寫:
什麼是方法的重寫
如果子類對繼承父類的方法不滿意,是可以重寫父類的繼承的方法的,當調用方法時會優先調用子類的方法。
(5)繼承的初始化順序
初始化父類再初始化子類。
先執行初始化對象中的屬性,再執行構造方法中的初始化。
(6)java中final的使用
final關鍵字
使用final關鍵字做標識有“最終的”含義。
final可以修飾類、方法、屬性和變數。
修飾類,該類不允許被繼承
修飾方法,該方法不允許被覆蓋或重寫
修飾屬性,系統不會對其進行隱式初始化(類的初始化屬性必須有值),所以必須賦值或者在構造方法中賦值
修飾變數,該變數只允許被賦值一次,該變數成為常量
(7)Java中的super的使用
super關鍵字:
在對象的內部使用,可以代表父類對象。
1、訪問父類的屬性
super.age
2、訪問父類的方法
super.eat()
子類的構造的過程當中必須調用其父類的構造方法 相當於super();預設是調用無參的
如果子類的構造方法中沒有顯示調用父類的構造方法,系統會預設調用父類無參的構造方法.
如果要顯示的調用父類的構造方法,必須在子類的構造方法第一行中添加super();
如果子類構造方法中既沒有顯示調用父類的構造方法,而父類又沒有無參的構造方法,則編譯出錯.
(8)Java中的Object類
Object類是所有類的父類,如果一個類沒有使用extends關鍵字明確標識繼承另外一個類,那麼這個類預設繼承Object類,且Object類中的方法適合 所有子類。
1、toString()方法
在Object類裡面定義toString()方法的時候返回的對象的哈希code碼(對象地址字元串)。
如果我們在代碼裡面直接輸出一個對象,會輸出這個對象在記憶體中的地址,我們把它稱為哈希碼,哈希碼是通過哈希演算法生成的一個字元串用來. 唯一區分對象的。
可以通過重寫toString()方法表示出對象的屬性。
2、equals()方法
比較的是對象的引用是否是指向同一塊記憶體地址。
一般情況下比較兩個對象時比較他的值是否一致,所有要進行重寫。
public static void main(String[] args)
{
Dog dog = new Dog();
Dog dog2 = new Dog();
if(dog.equals(dog2))
{
System.out.print("兩個對象都是相同的");
}
else
{
System.out.print("兩個對象都是不相同的");
}
}
重寫equals方法:
public static void main(String[] args)
{
Dog dog = new Dog();
Dog dog2 = new Dog();
if(dog.equals(dog2))
{
System.out.print("兩個對象都是相同的");
}
else
{
System.out.print("兩個對象都是不相同的");
}
}
4、多態
(1)引用多態
父類的引用可以指向本類的對象
父類的引用可以指向子類的對象
(2)方法多態
創建本類對象時,調用的方法為本類方法
創建子類對象時,調用的方法為子類重寫的方法或者繼承的方法
引用類型轉換:
(1)向上類型轉換(隱式/自動類型轉換),是小類型到大類型的轉換
如:Dog dog=new Dog();Animal animal=dog;//正確,自動類型提升,向上類型轉換
(2)向下類型轉換(強制類型轉換),是大類型到小類型的轉換
如:Dog dog1=(Dog)animal;//向下類型轉換
(3)instanceof運算符,來解決引用對象的類型,避免類型轉換的安全性問題
Dog dog=new Dog();
Animal animal=dog;
Cat cat=(Cat)animal;
編譯時不會出錯(按Cat類型進行編譯),但運行時會報錯,因為它開闢的是Dog類型的空間,而(無法將引用類型進行轉換)無法將dog對象轉換成Cat類型,並且此方法對程式的安全性有影響。此時應該利用instanceof和if語句結合使用,進行驗證,以保證程式的安全性。
//判斷animal類中是否包含Cat類型的元素,若包含則進行轉換,instanceof返回值為布爾類型。
if(animal instanceof Cat){
Cat cat=(Cat)animal;
}else{
System.out.println("無法進行類型轉換");
}
5、抽象類
(1)語法定義:
抽象類前使用abstract關鍵字修飾,則該類為抽象類。
(2)應用場景:
a、在某些情況下,某個父類只是知道其子類應該包含怎樣的方法,但無法準確知道這些子類如何實現這些方法
b、從多個具有相同特征的類中抽象出一個抽象類,以這個抽象類作為子類的模板,從而避免了子類設計的隨意性。
(3)作用:
限制規定子類必須實現某些方法,但不關註實現細節。
(4)使用規則:
a、abstract定義抽象類
b、abstract定義抽象方法,只有聲明,不需要實現
c、包含抽象方法的類是抽象類
d、抽象類中可以包含普通的方法,也可以沒有抽象方法
e、抽象類不能直接創建,可以定義引用變數
public abstract class Telephone{
public abstract void call();
public abstract void message();
}
6、介面
(1)介面的概念
介面可以理解為一種特殊的類,由全局常量和公共的抽象方法所組成。
介面定義了某一批類所需要遵守的規範。
(2)介面定義
和類定義不同,定義介面使用interface關鍵字。
[修飾符] interface abstract 介面名 [extends 父介面1,父介面2……]
{
//中括弧中為可選項
零個到多個常量定義……
零個到多個抽象方法的定義
}
(3)介面就是用來被繼承、被實現的,修飾符一般建議用public,不能使用private和protected修飾介面。
(4)介面中的屬性是常量(public static final修飾),系統會自動加上
(5)介面中的方法只能是抽象方法(public abstract修飾),系統會自動加上
(6)使用介面:一個類可以實現一個或多個介面,實現介面使用implements關鍵字。java中一個類只能繼承一個父類,可以通過實現多個介面作補充。
[修飾符] class 類名 extends 父類 implements 介面1,介面2……{
類體部分//如果繼承的是抽象類,需要實現繼承的抽象方法;要實現介面中的抽象方法
}
如果要繼承父類,繼承父類必須在實現介面之前
介面命名時首字母為I,以區分類名。
public interface IPlayGame{
public void playGame();
}
public class Psp implements IPlayGame{
public void playGame(){
System.out.print("具有了玩游戲的功能");
}
}
IPlayGame ip1 = new Psp();
ip2.playGame();