面向物件程式設計基礎(三)--抽象類--電腦管理
阿新 • • 發佈:2020-12-20
技術標籤:JAVA抽象類面向物件程式設計java類eclipse
目錄
Java 抽象類
在面向物件的概念中,所有的物件都是通過類來描繪的,但是反過來,並不是所有的類都是用來描繪物件的,如果一個類中沒有包含足夠的資訊來描繪一個具體的物件,這樣的類就是抽象類。 抽象類除了不能例項化物件之外,類的其它功能依然存在,成員變數、成員方法和構造方法的訪問方式和普通類一樣。 由於抽象類不能例項化物件,所以抽象類必須被繼承,才能被使用。也是因為這個原因,通常在設計階段決定要不要設計抽象類。 父類包含了子類集合的常見的方法,但是由於父類本身是抽象的,所以不能使用這些方法。
在Java中抽象類表示的是一種繼承關係,一個類只能繼承一個抽象類,而一個類卻可以實現多個介面。
抽象方法
如果你想設計這樣一個類,該類包含一個特別的成員方法,該方法的具體實現由它的子類確定,那麼你可以在父類中宣告該方法為抽象方法。
Abstract 關鍵字同樣可以用來宣告抽象方法,抽象方法只包含一個方法名,而沒有方法體。
抽象方法沒有定義,方法名後面直接跟一個分號,而不是花括號。
抽象類總結規定
1. 抽象類不能被例項化(初學者很容易犯的錯),如果被例項化,就會報錯,編譯無法通過。只有抽象類的非抽象子類可以建立物件。 2. 抽象類中不一定包含抽象方法,但是有抽象方法的類必定是抽象類。 3. 抽象類中的抽象方法只是宣告,不包含方法體,就是不給出方法的具體實現也就是方法的具體功能。 4. 構造方法,類方法(用 static 修飾的方法)不能宣告為抽象方法。 5. 抽象類的子類必須給出抽象類中的抽象方法的具體實現,除非該子類也是抽象類。
例題
一、面向物件程式設計基礎(70分) 命名App1.java
要求:(1)按照題目所給變數名稱、型別和方法名稱進行程式設計,禁止修改;
(2)本題中所有內容寫在原始檔App1.java中。
(3)程式設計環境可選,Eclipse和JDK均可。
1、定義抽象的儲存類(Storage)
成員變數:
品牌(brand) String型別 如:“希捷、華碩等”
型號(type) String型別 如:STDR2000307等
所有者(owner) String型別 預設為考生的學號和姓名,如:201809254王偉
靜態變數(num) int型別 記錄建立的物件個數
構造方法:
構造方法(1),通過形參初始化名稱(brand)。
普通方法:
getType( ),返回型號。
show(),用於輸出所有成員變數的值。
void compare(Storage),用於比較兩個物件是否相等。
靜態方法:
static void count()用於輸出建立的物件個數。
2、通過main方法測試
(1)建立兩個Storage物件stor1、stor2,判斷這兩個物件是否相等。
(2)分別呼叫show()輸出兩個物件。
程式碼:
package 大二;
//定義抽象的儲存類
abstract class Storage{
protected String brand;
protected String type;
protected String owner;
private static int num;
//構造方法一
public Storage(String xm){
brand = xm;
}
//構造方法二
public Storage(String xm,String type,String owner,int num) {
this(xm);
this.type=type;
this.owner=owner;
this.num = num;
}
//普通方法
// 返回型號
abstract public String getType(); //宣告抽象方法
//輸出所有成員變數的值
abstract public void show(); //宣告抽象方法
//比較兩個物件是否相等
abstract public void compare(Storage stor); // 宣告抽象方法
//靜態方法
//用於輸出建立的物件個數
public static void count() {
System.out.println("建立的物件個數:"+num);
}
}
//定義繼承自Storage的子類compute
class compute extends Storage {
//構造方法
public compute(String xm, String type, String owner, int num) {
super(xm, type, owner, num);
// TODO Auto-generated constructor stub
}
//構造方法
public compute(String xm) {
super(xm);
// TODO Auto-generated constructor stub
}
//實現抽象類中的getType方法
@Override
public String getType() {
// TODO Auto-generated method stub
return brand;
}
//實現抽象類重的show方法
public void show() {
// TODO Auto-generated method stub
System.out.println("品牌:"+brand);
System.out.println("型號:"+type);
System.out.println("所有者:"+owner);
}
//實現抽象類中的compare方法
public void compare(Storage stor) {
// TODO Auto-generated method stub
if (this.owner == stor.owner)System.out.println("這兩個物件相等");
else System.out.println("這兩個物件不相等");
}
};
//定義主類
public class App1 {
public static void main(String[] args) {
Storage stor1 = new compute("神州","STDR2000307","20191544119胡超",1); //宣告父類物件stor1,指向子類物件
Storage stor2 = new compute("華碩","STDR2000308","20191544118giao凱",2); //宣告父類物件stor2,指向子類物件
stor1.compare(stor2);
stor1.show();
stor2.show();
}
}
執行結果如下: