最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

在java中如何定義一個抽象屬性示例詳解

 更新時間:2017年08月18日 11:26:40   作者:瘋狂的技術(shù)宅  
這篇文章主要給大家介紹了關(guān)于在java中如何定義一個抽象屬性示例詳解的相關(guān)資料,需要的朋友可以參考下

前言

本文主要給大家介紹的是在java中定義一個抽象屬性的相關(guān)內(nèi)容,分享出來供大家參考學習,下面話不多說了,來一起看看詳細的介紹:

Abstract關(guān)鍵字通常被用于類和方法,用來把某些行為的實現(xiàn)委托給子類。由于Java不支持抽象屬性,如果你試圖將類屬性標記為抽象,將會得到一個編譯時錯誤。

在本教程中,我們將介紹兩種定義抽象屬性的方法,這些抽象屬性可以由子類進行設(shè)置,而且不使用Abstract 關(guān)鍵字。

實用案例

假設(shè)我們想要實現(xiàn)一個記錄事務的日志模塊,用來記錄特定事務的信息。我們希望這個模塊是抽象的,這樣我們可以實現(xiàn)不同的日志記錄方式,例如:記錄到文件或數(shù)據(jù)庫中。

我們的引擎使用預定義的分隔符來連接日志中的信息,并存儲在一個String中。具體應該使用哪個分隔符,這將取決于日志記錄的規(guī)則,例如可以用字符“,”對日志記錄中不同部分的信息進行分割。

因此,分隔符看起來對我們的引擎是抽象的,需要由每個日志記錄規(guī)則明確定義。

下面我提供兩種方式,來實現(xiàn)把分隔符的定義委托給子類。

在抽象類中定義帶參數(shù)的構(gòu)造函數(shù)

在抽象類中定義動態(tài)屬性的第一種方法是:定義一個參數(shù)的構(gòu)造函數(shù)。

所以我們可以這樣實現(xiàn)這個引擎:

// TransactionManager.java

public abstract class TransactionManager {
 private String separator;
 
 public TransactionManager(String separator) {
 this.separator = separator;
 }
 
 public abstract void writeTransaction(String result);
 
 public Transaction startTransaction()
 {
 Transaction transaction = new Transaction(System.currentTimeMillis());
 return transaction;
 }
 
 public void endTransaction(Transaction t) {
 long processingTime = System.currentTimeMillis() - t.getStartTime();
 
 StringBuilder logBuilder = new StringBuilder();
 logBuilder.append(t.getStartTime());
 // Notice the use of this.separator
 logBuilder.append(this.separator);
 logBuilder.append(processingTime);
 logBuilder.append(this.separator);
 logBuilder.append(t.getData());
 
 String result = logBuilder.toString();
 writeTransaction(result);
 }
}

在抽象類中定義帶參數(shù)的構(gòu)造函數(shù)時,子類將會被強制定義自己的構(gòu)造函數(shù)并調(diào)用super() 。 這樣我們就能強制separator屬性依賴于已使用的日志記錄機制。

注意:我們的引擎實現(xiàn)了所有日志機制共有的靜態(tài)行為:startTransaction() , endTransaction() ,同時將動態(tài)行為writeTransaction()交給子類去實現(xiàn)。

現(xiàn)在,如果我們想要創(chuàng)建一個事務管理器,用它將日志內(nèi)容記錄到一個文件中,那么可以這樣去定義:

public class TransactionManagerFS extends TransactionManager{
 
 // The IDE forces you to implement constructor.
 public TransactionManagerFS(String separator) {
 super(separator);
 }
 
 @Override
 public void writeTransaction(String result) {
 System.out.println("The following transaction has just finished: " );
 System.out.println(result);
 }
}

接下來做一個測試,看看代碼是怎樣工作的

public static void main(String[] args) throws InterruptedException {
 // we pass the separator explicitly in the constructor
 TransactionManager transactionManager = new TransactionManagerFS(",");
 Transaction transaction = transactionManager.startTransaction();
 transaction.setData("This is a test transaction !!");
 Thread.sleep(1500);
 transactionManager.endTransaction(transaction);
 }

輸出:

The following transaction has just finished: 
1502179140689,1501,This is a test transaction !!

通過getter方法傳遞分隔符

另外一種實現(xiàn)動態(tài)屬性的方法是:通過定義一個抽象的getter方法,該方法根據(jù)當前的日志記錄機制來檢索所需的分隔符。在我們的引擎中,當需要要使用分隔符時,可以通過調(diào)用這個getter方法得到。

接下來我們將引擎修改成這樣:

public abstract class TransactionManager {
 
 public abstract String getSeperator();
 public abstract void writeTransaction(String result);
 
 public Transaction startTransaction()
 {
 Transaction transaction = new Transaction(System.currentTimeMillis());
 return transaction;
 }
 
 public void endTransaction(Transaction t) {
 long processingTime = System.currentTimeMillis() - t.getStartTime();
 
 StringBuilder logBuilder = new StringBuilder();
 logBuilder.append(t.getStartTime());
 // Notice the use of getSeparator()
 logBuilder.append(getSeperator());
 logBuilder.append(processingTime);
 logBuilder.append(getSeperator());
 logBuilder.append(t.getData());
 
 String result = logBuilder.toString();
 writeTransaction(result);
 }
}

另外修改TransactionManagerFS如下:

public class TransactionManagerFS extends TransactionManager{
 
 @Override
 public String getSeperator() {
 return ",";
 }
 
 @Override
 public void writeTransaction(String result) {
 System.out.println("The following transaction has just finished: " );
 System.out.println(result);
 }
}

然后,修改main以使用新的實現(xiàn),并確保得到正確的結(jié)果。

public static void main(String[] args) throws InterruptedException {
 // The separator is defined implicitly using getSeparator() method of the manager
 TransactionManager transactionManager = new TransactionManagerFS();
 Transaction transaction = transactionManager.startTransaction();
 transaction.setData("This is a test transaction !!");
 Thread.sleep(1500);
 transactionManager.endTransaction(transaction);
 }

輸出:

The following transaction has just finished: 
1502179140689,1501,This is a test transaction !!

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

翻譯:瘋狂的技術(shù)宅

原文:http://programmergate.com/define-abstract-property-java/

本文首發(fā)微信公眾號:充實的腦洞

相關(guān)文章

  • Django+Django-Celery+Celery的整合實戰(zhàn)

    Django+Django-Celery+Celery的整合實戰(zhàn)

    這篇文章主要介紹了Django+Django-Celery+Celery的整合實戰(zhàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-01-01
  • Python繪制K線圖之可視化神器pyecharts的使用

    Python繪制K線圖之可視化神器pyecharts的使用

    這篇文章主要介紹了Python繪制K線圖之可視化神器pyecharts的使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-03-03
  • Python中比較特別的除法運算和冪運算介紹

    Python中比較特別的除法運算和冪運算介紹

    這篇文章主要介紹了Python中比較特別的除法運算和冪運算介紹,“/”這個是除法運算,那么這個“//”呢?“*”這個是乘法運算,那么這個“**”呢?本文就講解這些運算的不同,需要的朋友可以參考下
    2015-04-04
  • python操作mysql實現(xiàn)一個超市管理系統(tǒng)

    python操作mysql實現(xiàn)一個超市管理系統(tǒng)

    超市管理系統(tǒng)有管理員和普通用戶兩條分支,只需掌握Python基礎(chǔ)語法,就可以完成這個項目,下面這篇文章主要給大家介紹了關(guān)于python操作mysql實現(xiàn)一個超市管理系統(tǒng)的相關(guān)資料,需要的朋友可以參考下
    2022-12-12
  • Python Socket編程之多線程聊天室

    Python Socket編程之多線程聊天室

    這篇文章主要為大家詳細介紹了Python Socket編程之多線程聊天室,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-07-07
  • Python正則表達式的使用范例詳解

    Python正則表達式的使用范例詳解

    本文將是一系列關(guān)于Python正則表達式文章的其中一部分。在這個系列的第一篇文章中,我們將重點討論如何使用Python中的正則表達式并突出Python中一些獨有的特性。
    2014-08-08
  • python中各種路徑設(shè)置的方法詳解

    python中各種路徑設(shè)置的方法詳解

    python程序想要在一個設(shè)備上去運行除了需要安裝python解釋器和相關(guān)依賴項之外,還需要將對應的文件路徑添加到環(huán)境變量path中才可以,下面這篇文章主要給大家介紹了關(guān)于python中各種路徑設(shè)置的相關(guān)資料,需要的朋友可以參考下
    2022-12-12
  • Python中的條件判斷語句基礎(chǔ)學習教程

    Python中的條件判斷語句基礎(chǔ)學習教程

    這篇文章主要介紹了Python中的條件判斷語句基礎(chǔ)學習教程,文中使用的是Python2.x版本但條件語句部分的使用規(guī)則未在3.x中改變,需要的朋友可以參考下
    2016-02-02
  • 利用一個簡單的例子窺探CPython內(nèi)核的運行機制

    利用一個簡單的例子窺探CPython內(nèi)核的運行機制

    這篇文章主要介紹了利用一個簡單的例子窺探CPython內(nèi)核的運行機制,作者通過一個簡單的輸出函數(shù)深入、介紹了CPython源碼C代碼中的一些函數(shù),需要的朋友可以參考下
    2015-03-03
  • python友情鏈接檢查方法

    python友情鏈接檢查方法

    這篇文章主要介紹了python友情鏈接檢查方法,涉及Python讀取txt文件進行友鏈查詢的相關(guān)技巧,非常簡單實用,需要的朋友可以參考下
    2015-07-07

最新評論

千阳县| 靖远县| 丰台区| 姜堰市| 积石山| 小金县| 乌拉特中旗| 滨州市| 洪雅县| 图木舒克市| 云阳县| 沁源县| 萍乡市| 荥经县| 潞城市| 黄骅市| 绥芬河市| 汝城县| 云龙县| 宜兰县| 弋阳县| 沈丘县| 光泽县| 象山县| 阿城市| 卢湾区| 娱乐| 阿荣旗| 平定县| 策勒县| 申扎县| 黄石市| 利津县| 陵川县| 永仁县| 罗江县| 双城市| 蓝田县| 庆元县| 达拉特旗| 宁南县|