繼承和抽象類
1、繼承
1.1、概念
? 繼承是將多個類的相同屬性和行為抽取到一個單獨的類中,只要繼承單獨這個類,即可使用這些屬性和行為,
1.2、作用
- 子類繼承父類可以自動擁有父類中的屬性和行為
- 繼承的出現減少了代碼冗余,提高了代碼的復用性
- 繼承的出現,更有利于功能的拓展
1.3、格式
-
public class 子類名 extends 父類名 {
}
1.4、使用步驟
? 將子類的共性內容抽取到父類中,先寫父類,后寫子類
1.5、注意事項
- 父類的構造器不會繼承到子類中
- 父類私有的內容子類不能使用
1.6、繼承的特點
1. 類只能單繼承(即一個類只能有一個父類)
2. 可以多層繼承
3. 個類不寫父類會自動繼承Object
1.7、繼承后成員變數訪問的特點
? 就近原則
1.8、繼承后成員方法訪問的特點
? 就近原則
1.9 繼承后構造器訪問的特點
- 如果一個類不寫構造器,那么Java編譯器會自動添加一個無參構造器
- 繼承中構造器的訪問特點
- 子類中所有的構造器默認都會先訪問父類中的無參構造器,再執行本類中的構造器
- 子類無參構造器會呼叫父類無參構造器
- 子類有參構造器呼叫父類的有參構造器
1.10 繼承后的方法重寫
? 父類方法不能滿足子類的要求,子類重新寫一遍這個方法
2、抽象類
2.1、抽象方法介紹
? 父類知道子類一定要完成某個功能,但是每個子類實作的情況都不一樣,父類的該功能就可以定義成抽象方法,
2.2、抽象方法格式
- 普通方法格式
- 修飾符 回傳值型別 方法名(引數串列){...}
- 抽象關鍵字
- abstract
- 抽象方法的格式
- public abstract 回傳值型別 方法名(引數串列)
- eg: public abstract void pay(int money)
- 回傳值型別前面添加 abstract
- 方法體{},改成;
- public abstract 回傳值型別 方法名(引數串列)
- PS:抽象方法一定要放在抽象類中(即有抽象方法的類一定要宣告稱抽象類,抽象類可以沒有抽象方法)
2.3、抽象類的格式
- abstract class 類名{...}
2.4、抽象類的使用步驟
1. 定義類繼承抽象類
- 重寫抽象方法
- 使用子類物件
2.5、抽象類的思想
? 抽象類是用來被繼承的,抽象方法交給子類重寫實作
- PS:父類中抽象方法有必要存在嗎
- 父類不寫抽象方法,子類也可以不寫這個方法,不過會導致功能缺失
2.6、抽象類注意事項
-
- 抽象類不能創建物件
- 抽象類中有構造器,讓構造器給成員變數賦值
- 抽象方法必須放在抽象類中,抽象類中可以沒有抽象方法
- 子類必須重寫抽象類中的所有抽象方法,如果子類只重寫一部分抽象方法,子類必須宣告為抽象類
2.7、模板模式步驟
- 將固定的流程放到父類中
- 將不同的細節由子類去實作
2.7 示例代碼
卡片(父類)
// 卡片(父類)
public abstract class Card {
private String name; // 名稱
private double balance; // 余額
// 支付功能
public void pay(int money) {
System.out.println("輸入用戶名和密碼");
System.out.println("登錄成功");
// 扣款
double newMoney = payment(money);
System.out.println("消費額:" + newMoney);
}
/**
* 抽象的扣款功能
* @param money 應付金額
* @return 實際支付金額
*/
public abstract double payment(int money);}
金卡(子類)
public class GoldCard extends Card {
public GoldCard() {
}
public GoldCard(String name, double balance) {
super(name, balance);
}
// 金卡打8折
@Override
public double payment(int money) {
return money * 0.8;
}
}
銀卡(子類)
public class SilverCard extends Card {
public SilverCard() {
}
public SilverCard(String name, double balance) {
super(name, balance);
}
// 銀卡打8.5折
@Override
public double payment(int money) {
return money * 0.85;
}
}
測驗類
public class Demo03 {
public static void main(String[] args) {
GoldCard gc = new GoldCard();
gc.pay(400);
System.out.println("--------------------------------------");
SilverCard sc = new SilverCard();
sc.pay(400);
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/492415.html
標籤:Java
上一篇:Java連接資料庫(增刪改查)
下一篇:Java中set集合簡介說明
