首先,当您将类标记为抽象时,您无法创建实例。抽象类只能被继承。
但是当您从非抽象类继承时,您可以从派生类和基类创建实例。所以你可以说抽象类是用来生成新类型的,是用来继承而不是创建实例的!
这也是某种相关的多态性。
例如,您有一个基本的 Employee 类,如下所示:
公共类员工
{
public string Name { get; set; }
public double Salary { get; set; }
public void IncreaseSalary(double rate)
{
this.Salary += (this.Salary * rate / 100);
}
}
现在当我们创建如下所示的 SalesRepresentative 类时,我们应该从 Employee 继承它,因为 SalesRepresentative 是一个 Employee。
公共类 SalesRepresentative : 员工
{
public double AnnualSalesAmount { get; set; }
}
现在SalesRepresentative 对象具有IncreaseSalary 方法,因为它是从Employee 继承的。但一般来说,销售代表和员工的工资会以不同的方式增加,例如根据他们的年销售额。
在这种情况下,您应该能够从 SalesRepresentative 更改 increaseSalary 的方法代码,但您不能。其实现在你已经接触到多态了
现在让我们来抽象一下。如果你想从继承的类中改变默认的IncreaseSalary代码,有两种选择。首先将方法标记为虚拟。第二个是将其标记为抽象。
不同之处在于如果您将其标记为虚拟。您不必在SalesRepresentative 中实现它,但如果您将其标记为抽象,则必须实现它,并且您应该忘记抽象成员只能在抽象类中。检查以下示例:
public abstract class Employee
{
public string Name { get; set; }
public double Salary { get; set; }
public abstract void IncreaseSalary(double rate);
}
公共类 SalesRepresentative : Employee
{
public double AnnualSalesAmount { get; set; }
public override void IncreaseSalary(double rate)
{
if (this.AnnualSalesAmount > 100000)
{
this.Salary += (this.Salary * (rate + 5) / 100);
}
else
{
this.Salary += (this.Salary * rate / 100);
}
}
}