1. 程式人生 > 其它 >面向物件程式設計基礎(三)--抽象類--電腦管理

面向物件程式設計基礎(三)--抽象類--電腦管理

技術標籤:JAVA抽象類面向物件程式設計javaeclipse

目錄

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)。

構造方法(2),通過形參初始化所有成員變數(要求呼叫構造方法(1))。
普通方法:
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();
	}
}

執行結果如下:
在這裡插入圖片描述