【C#】Class類別–子類別覆寫父類別同名的屬性與方法
設定父類別可以被覆寫的方法為virtual
設定子類別覆寫父類別同名的方法為override
如果子類別想加強父類別的方法,卻不想重新撰寫父類別中相同程式,只要在子類別中的方法呼叫父類別,並加上base語法(base.方法或base.屬性)即可。
延伸:Class(類別)應用範例作強化
程式碼:
class Employee // 定義Employee員工類別
{
//_salary宣告為Protected保護層級,此欄位可以在子類別中使用
protected int _salary;
//底薪20000~40000
public virtual int Salary
{
get
{
return _salary;
}
set
{
if ((value >= 20000) & (value <= 40000))
{
_salary = value;
}
else
{
_salary = 20000;
}
}
}
public virtual void ShowTotal()//ShowTotal方法允許被覆寫
{
Console.WriteLine("底薪:{0}", Salary);
}
}
// 定義Manager經理子類別繼承自Employee員工父類別
class Manager : Employee
{
public int Bonus { get; set; }
//覆寫父類別 底薪30000~60000
public override int Salary
{
get
{
return _salary; //使用父類別的_salary
}
set
{
if ((value >= 30000) && (value <= 60000))
{
_salary = value;
}
else
{
_salary = 30000;
}
}
}
public override void ShowTotal()//覆寫Employee的ShowTotal方法
{
base.ShowTotal();//呼叫父類別Employee的ShowTotal方法
Console.WriteLine("薪水+獎金共:{0}", Bonus + Salary);
}
}
// 定義Sale業務子類別繼承自Employee員工父類別
class Sale : Employee
{
public double Bonus { get; set; }
//覆寫父類別 底薪17688 最低工資
public override int Salary
{
get
{
return _salary; //使用父類別的_salary
}
set
{
_salary = 17688;
}
}
public override void ShowTotal()//覆寫Employee的ShowTotal方法
{
base.ShowTotal();//呼叫父類別Employee的ShowTotal方法
Bonus = Bonus * 0.05;
Console.WriteLine("薪水+獎金共:{0}", Bonus + Salary);
}
}
static void Main(string[ ] args)
{
Employee tom = new Employee();
tom.Salary = 40000;
Console.WriteLine("tom員工薪水{0}", tom.Salary);
tom.ShowTotal();
Console.WriteLine("===================");
Console.WriteLine();
Manager peter = new Manager(); // 建立Manager經理類別peter物件
peter.Salary = 70000;
Console.WriteLine("peter經理薪水{0}", peter.Salary); // 顯示薪水
peter.Bonus = 30000;
Console.WriteLine("peter經理獎金{0}", peter.Bonus); // 顯示獎金
peter.ShowTotal(); // 顯示薪水+獎金
Console.WriteLine("===================");
Console.WriteLine();
Sale jason = new Sale(); // 建立Sale業務類別jason物件
jason.Salary = 70000;
Console.WriteLine("jason業務薪水{0}", jason.Salary); // 顯示薪水
jason.Bonus = 30000;
Console.WriteLine("jason業務獎金{0}", jason.Bonus); // 顯示獎金
jason.ShowTotal(); // 顯示薪水+獎金
Console.Read();
}
執行畫面:

留言
張貼留言