關于抽象類 (水果舉例)(DoWork)

抽象類是不能夠實例化的類:

它的作用就是產生子類的同時給于子類一些特定的屬性和方法.

來個簡單的例子...

如果你的程序里面需要用到蘋果和梨這2個類..那么你可以分別給出這2個類

但是你會發現這2個類里面有共同的屬性和方法(屬性: 都有核.. 方法: 都需要削皮吃...)那么你可以建立抽象類 "水果" 把這些共同的東西都定義在那里. 那么你的2個子類就只需要實其他必要的東東了(味道, 價格...)

優點: 當你需要對蘋果和梨做新的,共同的修改或者添加的時候. 你現在就可以直接對他們的超類 水果 做就可以了.

----------------------------------

可以確定某個類型一定會有一種操作,但是這個類型上還不能確定這個操作具體應該如何執行,而要延伸到它的子類才可以確定

比如說在一個模型中,有一個 Employee 類,可以肯定的是 Employee 都應該會有一個 doWork 方法,也就是企業員工都要工作

但是,這個工作具體應該如何做,則需要到更精確的類型才可以確定。比如“清潔工”是公司里的一個員工,他們的 doWork 方法就可以確定是打掃衛生;Sales 的 doWork 則是和客戶談生意等。

而在很多時候,我們要關注的是對象更加“泛”的類型,而不是更精確的類型。比如公司老板在招集員工開了一個短會之后,宣布散會,然后大家回去繼續工作,也就是將用全體員工對象的 doWork 方法調用一次。在這里,老板在調用 doWork 方法時關注的是它的父類型,而不是子類類型,他沒興趣也沒有必要去判斷每個員工的子類型是什么。

這種思想在 jdk 的類庫中多有體現。

比如 java.io.InputStream 類是一個抽象類,它的 read() 方法是一個抽象方法,它用于從輸入流中讀取一個字節的數據。

然而在 java 中,無論從網絡還是從文件中讀取數據都是用 Stream 類,顯然文件和網絡數據流的讀取操作是不一樣的。但是無論是網絡還是文件,可以確定的是InputStream 一定會有一個 read() 方法用于從流中讀取一個字節的操作。所以 InputStream 被定義成抽象類,read 方法被定義為抽象方法。read 方法是由它們的子類來完成的,文件的read方法由FileInputStream 類實現,網絡輸入流則是由 Socket.getInputStream 方法得到的 InputStream 的一個子類來對象來實現的。

免責聲明:本文僅代表文章作者的個人觀點,與本站無關。其原創性、真實性以及文中陳述文字和內容未經本站證實,請讀者僅作參考,并自行核實相關內容。如發現有害或侵權內容,請聯系郵箱:jubao@pinlue.com,我們將在第一時間進行核實處理。

http://image95.pinlue.com/image/76.jpg
分享
評論
首頁
暖暖高清在线观看视频桃花社区视频在线观看播放