簡體   English   中英

從非抽象類派生抽象類

[英]Derive abstract class from non-abstract class

從非抽象類派生抽象類是否可以,或者這種方法有問題嗎?

這是一個小例子:

public class Task {
  // Some Members
}

public abstract class PeriodicalTask : Task {
  // Represents a base class for task that has to be done periodicaly.
  // Some additional Members
}

public class DailyTask : PeriodicalTask {
  // Represents a Task that has to be done daily.
  // Some additional Members
}

public class WeeklyTask : PeriodicalTask {
  // Represents a Task that has to be done weekly.
  // Some additional Members
}

在上面的例子中,我不想讓類Task抽象,因為我想直接實例化它。 PeriodicalTask​​應該從Task繼承功能並添加一些額外的成員,但我不想直接實例化它。 只應實例化PeriodicalTask​​的派生類。

我認為這種方法沒有任何問題。

您可能有一些可以用具體術語描述的基本類型。 現在,僅僅因為這種類型的對象可能會根據某個子類型進一步分類,並不是說所有這些子類型都具體; 他們可能反過來要求進一步具體化。

現實世界的例子:

Person - 具體 (非抽象)
Sibling: Person - 抽象
Brother: Sibling - 混凝土
Sister: Sibling - 混凝土

它沒有錯。

如果你看一下像WinForms這樣的大層次結構,你會發現幾層抽象類型。

MSBuild任務也是一個很好的(更相關)的例子。

這種事情一直在發生:所有抽象類都繼承自System.Object ,這個類本身並不是abstract的。

new System.Object()有時用於鎖定,如果你沒有其他任何東西,你可以鎖定。

因此,使用抽象不是正確的方法,例如,使用受保護的或內部構造函數。 這樣可以防止直接創建PeriodicalTask​​的實例,但是派生類仍然可以訪問它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM