Board logo

標題: 抽象類別 [打印本頁]

作者: 周政輝    時間: 2018-3-17 11:38     標題: 抽象類別

本帖最後由 周政輝 於 2018-3-17 11:54 編輯

抽象類別
在設計Java程式時,當程式設計者希望基礎類別只是用來被衍生類別繼承,而不希望真正產生一個基礎類別的物件,此時就可以將基礎類別宣告成抽象類別。

所謂抽象類別(Abstract Class)是指無法建立物件,只能被衍生類別繼承的一種特殊類別,而在抽象類別裡可以宣告抽象方法(Abstract Method),抽象方法是一個尚未完全實作的方法,表示一個方法原型,必須在衍生類別中撰寫方法的實作內容。

關於抽象類別的幾個重點歸納如下:

1. 包含抽象方法的類別一定要宣告為抽象類別。
2. 抽象類別有建構子,但無法產生物件實體。
3. 抽象類別可同時包含抽象方法與一般方法,也可以完全沒有抽象方法。
4. 抽象類別一定要被繼承,而抽象方法一定要被改寫。
5. 若衍生類別中有任何一個抽象方法沒有被實作,則必須將該類別也宣告為抽象類別,以便強迫更下層的類別在繼承它後,實作剩餘沒有被實作的抽象方法。

abstract class DataBase
  1. package kuas.mis.edu.tw;

  2. public abstract class DataBase {

  3.         public String ConnectionString;
  4.        
  5.         public abstract void Open();
  6.         public abstract void Close();
  7. }
複製代碼
MSSQL
  1. package kuas.mis.edu.tw;

  2. public class MSSQL extends DataBase {

  3.         @Override
  4.         public void Open() {
  5.                 // TODO 自動產生的方法 Stub
  6.                 System.out.println("MSSQL資料庫開啟");
  7.         }

  8.         @Override
  9.         public void Close() {
  10.                 // TODO 自動產生的方法 Stub
  11.                 System.out.println("MSSQL資料庫關閉");

  12.         }

  13. }
複製代碼
MySQL
  1. package kuas.mis.edu.tw;

  2. public class MySQL extends DataBase {

  3.         @Override
  4.         public void Open() {
  5.                 System.out.println("MySQL資料庫開啟");
  6.                
  7.         }

  8.         @Override
  9.         public void Close() {
  10.                 // TODO 自動產生的方法 Stub
  11.                 System.out.println("MySQL資料庫關閉");
  12.         }

  13. }
複製代碼
Main
  1. package kuas.mis.edu.tw;

  2. public class Main {

  3.         public static void main(String[] args) {
  4.                 // TODO 自動產生的方法 Stub
  5.                 DataBase db = new MSSQL(); // 可以任意更換類別
  6.                 db.Open();
  7.                 db.Close();
  8.         }
  9. }
複製代碼

作者: 張健勳    時間: 2018-3-17 11:52

  1. package bbs.istak.org.tw;

  2. public class Main {

  3.         public static void main(String[] args) {
  4.                 // TODO 自動產生的方法 Stub
  5.                
  6.                 DB db = new MySQL();
  7.                 db.Open();
  8.                 db.Close();
  9.                
  10.         }

  11. }
複製代碼
  1. package bbs.istak.org.tw;

  2. public abstract class DB {
  3.        
  4.         public String ConnectionString;
  5.        
  6.         public abstract void Open();
  7.        
  8.         public abstract void Close();
  9. }
複製代碼
  1. package bbs.istak.org.tw;

  2. public class MSSQL extends DB{

  3.         @Override
  4.         public void Open() {
  5.                 // TODO 自動產生的方法 Stub
  6.                 System.out.println("MSSQL資料庫開啟");

  7.         }

  8.         @Override
  9.         public void Close() {
  10.                 // TODO 自動產生的方法 Stub
  11.                 System.out.println("MSSQL資料庫關閉");

  12.         }

  13. }
複製代碼
  1. package bbs.istak.org.tw;

  2. public class MySQL extends DB{

  3.         @Override
  4.         public void Open() {
  5.                 // TODO 自動產生的方法 Stub
  6.                 System.out.println("MySQL資料庫開啟");
  7.                
  8.         }

  9.         @Override
  10.         public void Close() {
  11.                 // TODO 自動產生的方法 Stub
  12.                 System.out.println("MySQL資料庫關閉");

  13.         }

  14. }
複製代碼

作者: 林侑成    時間: 2018-3-17 11:58

  1. package Asdf;

  2. public abstract class A1 {

  3.     public String ConnectionString;
  4.    
  5.     public abstract void Open();
  6.     public abstract void Close();
  7. }package Asdf;

  8. public class A2 extends A1 {
  9.       public void Open() {
  10.               // TODO 自動產生的方法 Stub
  11.               System.out.println("MSSQL資料庫開啟");
  12.       }
  13.       public void Close() {
  14.               // TODO 自動產生的方法 Stub
  15.               System.out.println("MSSQL資料庫關閉");

  16.       }
  17. }
  18. package Asdf;

  19. public class A3 extends A1{
  20.    public void Open() {
  21.             System.out.println("MySQL資料庫開啟");
  22.             
  23.     }
  24.     public void Close() {
  25.             // TODO 自動產生的方法 Stub
  26.             System.out.println("MySQL資料庫關閉");
  27.     }
  28. }
複製代碼

作者: 蔡季樺    時間: 2018-3-17 12:00

  1. package bbs.istak.org.tw;

  2. public class Main {

  3.         public static void main(String[] args) {
  4.                 // TODO 自動產生的方法 Stub
  5.                 DB db = new MYSQL();
  6.                         db.Open();
  7.                         db.Close();
  8.         }
  9. }
複製代碼
  1. package bbs.istak.org.tw;

  2. public abstract class DB {
  3.         public String cs;
  4.        
  5.         public abstract void Open();
  6.         public abstract void Close();
  7. }
複製代碼
  1. package bbs.istak.org.tw;

  2. public class MYSQL extends DB{

  3.         @Override
  4.         public void Open() {
  5.                 // TODO 自動產生的方法 Stub
  6.                 System.out.println("開啟資料庫");
  7.         }

  8.         @Override
  9.         public void Close() {
  10.                 // TODO 自動產生的方法 Stub
  11.                 System.out.println("關閉資料庫");
  12.         }

  13. }
複製代碼

作者: 黃茂勛    時間: 2018-3-17 20:04

  1. public abstract class DataBase {
  2.        public abstract void open();
  3.        public abstract void close();
  4. }
複製代碼
  1. public class MSSQL extends DataBase{
  2.     @Override
  3.     public void open() {
  4.             System.out.println("MSSQL資料庫開啟");       
  5.     }
  6.         @Override
  7.     public void close() {
  8.                 System.out.println("MSSQL資料庫關閉");
  9.         }
  10. }
複製代碼
  1. public class MySQL extends DataBase{
  2.         @Override
  3.     public void open() {
  4.             System.out.println("MySQL資料庫開啟");       
  5.     }
  6.         @Override
  7.     public void close() {
  8.                 System.out.println("MySQL資料庫關閉");
  9.         }
  10. }
複製代碼
  1. public class Main {

  2.         public static void main(String[] args) {
  3.                 DataBase db = new MSSQL();  
  4.                 DataBase db_2 = new MySQL();
  5.                 db.open();
  6.                 db_2.open();
  7.                 db.close();
  8.                 db_2.close();
  9.         }

  10. }
複製代碼





歡迎光臨 種子論壇 | 高雄市資訊培育協會學員討論區 (http://istak.org.tw/seed/) Powered by Discuz! 7.2