回答
只有派生類時纔有意義。
您可能需要在基類中實現一些常用方法。另外,您可能需要在抽象類中初始化一些thinhgs,以便您需要構造函數。
請看下面的例子:
abstract class Fruit
{
private Logger log;
// init private stuff
public Fruit()
{
this.log = new Logger("C:\\Temp");
}
// do common functionality
public int CalculatePrice(double weight)
{
return weight * GetPricePerKilo();
}
// specific stuff must be implemented by derived classes
public abstract double GetPricePerKilo();
}
class Apple : Fruit
{
// must implement in non-abstract derived class
public override double GetPricePerKilo()
{
return 4.30;
}
}
抽象類有抽象的某種行爲,同時還迫使你至少添加某種行爲,使其成爲一個實際的對象。把它想成公路車輛。你可以有一個抽象類RoadVehicle
,它包含一個非抽象函數Drive
。如果你從抽象函數繼承,我們假設一個具體的類Car
,我們已經可以訪問Drive
行爲。
如果您不想預定義行爲,最好使用僅包含實現該接口的每個類應具有的方法(和屬性)定義的接口。即我們可以有一個IVehicle
接口,其方法Move()
。那麼,陸地車輛,飛行器和水上交通工具都以不同的方式運行,因此預先定義行爲是沒有意義的,而在我們以前的案例中,行爲是相同的,我們已經可以將這種行爲添加到抽象類中。
抽象類的情況下,最有用的,其中一些成員將有行爲,每一個實施將獨立處理。舉個例子,一個ReadableDoubleMatrix
類,有三個屬性:
int Rows {get;};
int Columns {get;}
double this[int row, int column] {get;}
最簡單通用的實現可能是一個ImmutableArrayBackedMatrix類,其中包含一個double[,]
這是充滿在類的構造中,但其他實現將包括IdentityMatrix
其中包含size
值[Rows
和Columns
都返回size
,而this[row, column]
將返回row==column ? 1.0 : 0.0
]。因爲這些派生類沒有共同的字段,所以對於基類來說也是沒有意義的。但是,如果沒有任何字段,基類實例可能無法處理這些屬性。
請注意,即使人們可以例如使基類實現Rows
和Columns
返回1,並且this
返回0.0,並且代碼在某些情況下可能會發現這樣的對象有用,因此不會有任何原因代碼應該希望具有此類項的多個實例。即使代碼經常需要這樣一個矩陣,並且希望它是與所有其他矩陣不同的類型,通常最好使用這種密封類型。
- 1. C#:抽象類中的抽象和非抽象方法?
- 2. 抽象類非抽象方法調用
- 3. 構造函數和抽象類中的java調用方法?
- 4. 抽象類和構造函數
- 5. 抽象類和構造函數
- 6. 抽象類,構造函數和接口
- 7. Java:抽象類構造函數和this()
- 8. 非法在java構造函數中有抽象類列表?
- 9. 在超類的構造函數中調用抽象方法
- 10. 在抽象類中調用非抽象類方法
- 11. 通用抽象類構造函數
- 12. 抽象類中的構造函數
- 13. 抽象類中的構造函數?
- 14. 抽象類中的構造函數?
- 15. 抽象構造函數java
- 16. 使用抽象與構造函數
- 17. 抽象類和非抽象超類
- 18. 的Java抽象類的構造函數
- 19. 抽象類的構造函數
- 20. 抽象類,複製構造函數
- 21. 抽象類和抽象方法
- 22. 在抽象類中使用抽象類時如何實現抽象方法
- 23. createMock和非抽象的方法,抽象類
- 24. 將值插入抽象類中的非抽象方法使用子非抽象類
- 25. C#抽象類構造器
- 26. 抽象構造函數在C#
- 27. 抽象類中構造函數的用法是什麼?
- 28. 非多態和非抽象基類中的虛析構函數
- 29. 從抽象類調用非抽象方法
- 30. 非抽象類不能覆蓋Comparable中的抽象方法compareTo?
謝謝你們......所以主要區別在於「抽象」關鍵字允許我根據派生類的要求定義該抽象類在不同派生類中的全部或部分屬性,提供了一些已經定義的屬性(這種情況下的方法),可以在創建派生類的對象時使用它。我是對的先生? – Anadi
@ user2897975如果某些方法或屬性是抽象的,則整個類必須是抽象的,因爲如果實現例如缺少一種方法。是的,基本上你是對的,但1)不要混淆屬性和方法,2)它在編譯時發揮作用,當定義派生類而不是派生類的對象時。 – helb