抽象類,有3個特點: 第1個,不能被實例化。 第2個,類中的抽象方法在繼承的子類中必須重寫。 第3個,類一旦有抽象方法出現,那這個類必須定義為抽象類。 現實開發中,發現有共同的代碼,可以把這些共同的代碼放在一個抽象類中。舉個例子,計算四邊形的周長。 矩形,長方形,正方形: class Rectang ...
抽象類,有3個特點:
第1個,不能被實例化。
第2個,類中的抽象方法在繼承的子類中必須重寫。
第3個,類一旦有抽象方法出現,那這個類必須定義為抽象類。
現實開發中,發現有共同的代碼,可以把這些共同的代碼放在一個抽象類中。舉個例子,計算四邊形的周長。
矩形,長方形,正方形:
class Rectangle { private double _A; public double A { get { return _A; } set { _A = value; } } private double _B; public double B { get { return _B; } set { _B = value; } } public Rectangle() { } public Rectangle(double a, double b) { this._A = a; this._B = b; } public double Perimeter() { return 2 * (_A + _B); } }Source Code
長斜方形,長菱形:
class Rhomboid { private double _A; public double A { get { return _A; } set { _A = value; } } private double _B; public double B { get { return _B; } set { _B = value; } } public Rhomboid() { } public Rhomboid(double a,double b) { this._A = a; this._B = b; } public double Perimeter() { return 2 * (_A + _B); } }Source Code
梯形,不等邊四邊形:
class Trapezoid { private double _A; public double A { get { return _A; } set { _A = value; } } private double _B; public double B { get { return _B; } set { _B = value; } } private double _C; public double C { get { return _C; } set { _C = value; } } private double _D; public double D { get { return _D; } set { _D = value; } } public Trapezoid() { } public Trapezoid(double a,double b,double c,double d) { this._A = a; this._B = b; this._C = c; this._D = d; } public double Perimeter() { return _A + _B + _C + _D; } }Source Code
從上面三個類別中,你均可以看到有一個方法,Perimeter()是計算四邊形的周長。
經根博文開頭所言,你可以把這個方法抽出來,放在一個抽象類中,統一介面:
public abstract class Quadrilateral { //周長 public abstract double Perimeter(); }Source Code
把方法寫成抽象方法之後,每個類需要繼承此抽象類,並需要重寫 override抽象的方法。
下麵驗證一下代碼,如需要計算一個不規則的四邊形的周長,那就是4條邊相加: