標題:
抽象類別
[打印本頁]
作者:
周政輝
時間:
2018-3-17 11:38
標題:
抽象類別
本帖最後由 周政輝 於 2018-3-17 11:54 編輯
抽象類別
在設計Java程式時,當程式設計者希望基礎類別只是用來被衍生類別繼承,而不希望真正產生一個基礎類別的物件,此時就可以將基礎類別宣告成抽象類別。
所謂抽象類別(Abstract Class)是指無法建立物件,只能被衍生類別繼承的一種特殊類別,而在抽象類別裡可以宣告抽象方法(Abstract Method),抽象方法是一個尚未完全實作的方法,表示一個方法原型,必須在衍生類別中撰寫方法的實作內容。
關於抽象類別的幾個重點歸納如下:
1. 包含抽象方法的類別一定要宣告為抽象類別。
2. 抽象類別有建構子,但無法產生物件實體。
3. 抽象類別可同時包含抽象方法與一般方法,也可以完全沒有抽象方法。
4. 抽象類別一定要被繼承,而抽象方法一定要被改寫。
5. 若衍生類別中有任何一個抽象方法沒有被實作,則必須將該類別也宣告為抽象類別,以便強迫更下層的類別在繼承它後,實作剩餘沒有被實作的抽象方法。
abstract class DataBase
package kuas.mis.edu.tw;
public abstract class DataBase {
public String ConnectionString;
public abstract void Open();
public abstract void Close();
}
複製代碼
MSSQL
package kuas.mis.edu.tw;
public class MSSQL extends DataBase {
@Override
public void Open() {
// TODO 自動產生的方法 Stub
System.out.println("MSSQL資料庫開啟");
}
@Override
public void Close() {
// TODO 自動產生的方法 Stub
System.out.println("MSSQL資料庫關閉");
}
}
複製代碼
MySQL
package kuas.mis.edu.tw;
public class MySQL extends DataBase {
@Override
public void Open() {
System.out.println("MySQL資料庫開啟");
}
@Override
public void Close() {
// TODO 自動產生的方法 Stub
System.out.println("MySQL資料庫關閉");
}
}
複製代碼
Main
package kuas.mis.edu.tw;
public class Main {
public static void main(String[] args) {
// TODO 自動產生的方法 Stub
DataBase db = new MSSQL(); // 可以任意更換類別
db.Open();
db.Close();
}
}
複製代碼
作者:
張健勳
時間:
2018-3-17 11:52
package bbs.istak.org.tw;
public class Main {
public static void main(String[] args) {
// TODO 自動產生的方法 Stub
DB db = new MySQL();
db.Open();
db.Close();
}
}
複製代碼
package bbs.istak.org.tw;
public abstract class DB {
public String ConnectionString;
public abstract void Open();
public abstract void Close();
}
複製代碼
package bbs.istak.org.tw;
public class MSSQL extends DB{
@Override
public void Open() {
// TODO 自動產生的方法 Stub
System.out.println("MSSQL資料庫開啟");
}
@Override
public void Close() {
// TODO 自動產生的方法 Stub
System.out.println("MSSQL資料庫關閉");
}
}
複製代碼
package bbs.istak.org.tw;
public class MySQL extends DB{
@Override
public void Open() {
// TODO 自動產生的方法 Stub
System.out.println("MySQL資料庫開啟");
}
@Override
public void Close() {
// TODO 自動產生的方法 Stub
System.out.println("MySQL資料庫關閉");
}
}
複製代碼
作者:
林侑成
時間:
2018-3-17 11:58
package Asdf;
public abstract class A1 {
public String ConnectionString;
public abstract void Open();
public abstract void Close();
}package Asdf;
public class A2 extends A1 {
public void Open() {
// TODO 自動產生的方法 Stub
System.out.println("MSSQL資料庫開啟");
}
public void Close() {
// TODO 自動產生的方法 Stub
System.out.println("MSSQL資料庫關閉");
}
}
package Asdf;
public class A3 extends A1{
public void Open() {
System.out.println("MySQL資料庫開啟");
}
public void Close() {
// TODO 自動產生的方法 Stub
System.out.println("MySQL資料庫關閉");
}
}
複製代碼
作者:
蔡季樺
時間:
2018-3-17 12:00
package bbs.istak.org.tw;
public class Main {
public static void main(String[] args) {
// TODO 自動產生的方法 Stub
DB db = new MYSQL();
db.Open();
db.Close();
}
}
複製代碼
package bbs.istak.org.tw;
public abstract class DB {
public String cs;
public abstract void Open();
public abstract void Close();
}
複製代碼
package bbs.istak.org.tw;
public class MYSQL extends DB{
@Override
public void Open() {
// TODO 自動產生的方法 Stub
System.out.println("開啟資料庫");
}
@Override
public void Close() {
// TODO 自動產生的方法 Stub
System.out.println("關閉資料庫");
}
}
複製代碼
作者:
黃茂勛
時間:
2018-3-17 20:04
public abstract class DataBase {
public abstract void open();
public abstract void close();
}
複製代碼
public class MSSQL extends DataBase{
@Override
public void open() {
System.out.println("MSSQL資料庫開啟");
}
@Override
public void close() {
System.out.println("MSSQL資料庫關閉");
}
}
複製代碼
public class MySQL extends DataBase{
@Override
public void open() {
System.out.println("MySQL資料庫開啟");
}
@Override
public void close() {
System.out.println("MySQL資料庫關閉");
}
}
複製代碼
public class Main {
public static void main(String[] args) {
DataBase db = new MSSQL();
DataBase db_2 = new MySQL();
db.open();
db_2.open();
db.close();
db_2.close();
}
}
複製代碼
歡迎光臨 種子論壇 | 高雄市資訊培育協會學員討論區 (http://istak.org.tw/seed/)
Powered by Discuz! 7.2