一、繼承:
概念:在Java中,類的繼承是指在一個現有類的基礎上去構建一個新的類,構建出來的新類被稱作子類,現有類被稱作父類,子類會自動擁有父類所有可繼承的屬性和方法,
繼承的格式:在程式中,如果想宣告一個類繼承另一個類,需要使用extends關鍵字,
格式:
class 子類 extends 父類 {};
繼承的好處:
- 繼承的出現提高了代碼的復用性,提高軟體開發效率,
- 繼承的出現讓類與類之間產生了關系,提供了多型的前提,
重寫:
子類中出現與父類一模一樣的方法時,會出現覆寫操作,也稱為override重寫、復寫或者覆寫,
重寫的注意事項:
- 子類方法覆寫父類方法,必須要保證權限大于等于父類權限,
- 寫法上稍微注意:必須一模一樣:方法的回傳值型別 方法名 引數串列都要一樣,
總結:當一個類是另一個類中的一種時,可以通過繼承,來繼承屬性與功能,如果父類具備的功能內容需要子類特殊定義時,進行方法重寫,
二、多型:
同一個物件,呼叫不同類的實體,從而得到不同的結果,
super關鍵字:
super多用于構造方法中繼承父類的方法
super用來表示當前物件中包含的父類物件空間的參考,
在子類中,訪問父類中的成員變數格式:
super.父類中的成員變數
final關鍵字:
修飾類:不能被繼承
修飾方法:不能被重寫
修飾物件:不能參考其他物件
修飾變數:變為常量
修飾屬性,不能被重新賦值
實體:
撰寫程式實作披薩的制作,需求說明撰寫程式,接收輸入資訊,選擇需要制作的披薩,可供選擇的披薩有:培根披薩和海鮮披薩,
實作思路及關鍵代碼
1)分析培根披薩和海鮮披薩,
2)定義披薩類(作為父類),
屬性: 名稱、價格、大小;
方法:展示哦(show);
3)定義培根披薩和海鮮披薩,分別繼承披薩類,
4)定義披薩工廠類,根據輸入資訊生產具體的披薩物件,
:書寫思路
- 創建父類Pizza,創建公共屬性name,size,price
- 創建子類Bacon_pizza(培根披薩),創建私有屬性gram(培根克數),重寫父類方法show(),輸出披薩培根的各種屬性
- 創建子類Seafood_pizza(海鮮披薩),創建私有屬性seafood(海鮮口味),重寫父類方法show(),輸出海鮮培根的各種屬性
- 創建工廠java檔案Pizza_factory,創建函式select(),讓用戶輸入披薩的種類,分別進入不同的if陳述句進行兩種披薩的型別選擇,并將資料通過set方法進行屬性重寫,最后創建主函式運行,
一、父類Pizza:
public class Pizza {
// 定義Pizza屬性
private String name;
private String size;
private int price;
// 提供公共的get和set方法讓其他的類進行訪問
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
// 尺寸
public String getSize() {
return size;
}
public void setPrice(int price) {
this.price = price;
}
// 價格
public int getPrice() {
return price;
}
public void setSize(String size) {
this.size = size;
}
// 定義方法
public void show(){
}
// 定義無參構造方法
public Pizza(){
super();
}
// 定義有參構造方法
public Pizza(String name,String size,int price){
this.name = name;
this.size = size;
this.price = price;
}
}
二、子類Bacon_pizza:
public class Bacon_pizza extends Pizza {
// 定義培根披薩的私有屬性
private double gram;
public double getGram() {
return gram;
}
public void setGram(double gram) {
this.gram = gram;
}
// 定義無參的構造方法
public Bacon_pizza(){
}
// 定義有參的構造方法
public Bacon_pizza(String name,String size,int price,double gram){
// super 用來繼承父類的方法
super(name,size,price);
this.gram = gram;
}
public void show(){
System.out.println("披薩名稱為:"+super.getName());
System.out.println("培根的克數為:"+this.gram);
System.out.println("尺寸為:"+super.getSize());
System.out.println("價格為:"+super.getPrice());
}
}
三、子類Seafood_pizza:
public class Seafood_pizza extends Pizza {
private String seafood;
public String getSeafood() {
return seafood;
}
public void setSeafood(String seafood) {
this.seafood = seafood;
}
// 定義無參的構造方法
public Seafood_pizza(){
super();
}
// 定義有參的構造方法
public Seafood_pizza(String name,String size,int price,String seafood){
super(name,size,price);
this.seafood=seafood;
}
// 重寫父類的方法
public void show(){
System.out.println("披薩的名稱為:"+super.getName());
System.out.println("口味為:"+this.seafood);
System.out.println("尺寸為:"+super.getSize());
System.out.println("價格為:"+super.getPrice());
}
}
四、工廠Pizza_factory:
import java.util.Scanner;
public class Pizza_factory{
public void select(){
Scanner scanner = new Scanner(System.in);
System.out.println("請選擇請要制作的披薩種類:(1.培根披薩 2.海鮮披薩)");
int i = scanner.nextInt();
if (i==1){
System.out.println("請輸入培根的克數:");
double gram = scanner.nextDouble();
System.out.println("請輸入披薩的尺寸(大份、中份、小份):");
String size = scanner.next();
System.out.println("請輸入披薩的價格:");
int price = scanner.nextInt();
Pizza p = new Bacon_pizza();
Bacon_pizza b = (Bacon_pizza) p;
b.setGram(gram);
p.setName("培根披薩");
p.setSize(size);
p.setPrice(price);
p.show();
}else if (i==2){
System.out.println("請輸入海鮮的口味:");
String seafood = scanner.next();
System.out.println("請輸入披薩的尺寸(大份、中份、小份):");
String size = scanner.next();
System.out.println("請輸入披薩的價格:");
int price = scanner.nextInt();
Pizza p = new Seafood_pizza();
Seafood_pizza b = (Seafood_pizza) p;
b.setSeafood(seafood);
p.setName("海鮮披薩");
p.setSize(size);
p.setPrice(price);
p.show();
}else {
System.out.println("請輸入有效的數字!!!");
select();
}
}
public static void main(String[] args) {
Pizza_factory factory = new Pizza_factory();
factory.select();
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/227836.html
標籤:java
