多态、重装、重写
•
多态:同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果,这就是多态性。
抽象类、虚函数、接口三种方法实现的可以是多态性。
•
重载(
overload
):对象中同名函数,参数列表不同
•
重写
(
override
):在子类中重写函数,配合
abstract
和
virtual
使用
抽象类abstract:
1.在抽象类中声明方法时,如果加上abstract关键字,则为抽象方法。
2.一般将父类定义为抽象类,需要使用这个父类进行继承与多态处理。
3.继承和多态原理,继承树中越是在上方的类越抽象,如鸽子类继承鸟类、鸟类继承动物类。
☑ 抽象方法必须声明在抽象类中。
☑ 声明抽象方法时,不能使用virtual、static和private修饰符。
使用这个关键字定义的方法称为抽象方法,抽象方法没有方法体,这个方法本身没有任何意义,除非它被重写,而承载这个抽象方法的抽象类就必须被继承,实际上抽象类除了被继承之外没有任何意义。
1.
抽象类的父类无法直接
new
2.
父类对象等于子类后,可以正常调用子类实现的方法
3.
示例代码如下:
static void Main(string[] args)
{
DriveClass driveClass = new DriveClass();
driveClass.Show();
MyClass myClass = driveClass;
myClass.Show();
}
public abstract class MyClass
{
public abstract void Show();
}
public class DriveClass : MyClass
{
public override void Show()
{
//throw new NotImplementedException();
Console.WriteLine("DriveClass");
}
}
运行结果
虚方法virtual
1.
如图代码所示,
virtual
可以在该对象中实现
2.
在子类中重写同名的函数时需要用到
virtual
和
override
虚方法Virtual展示代码
1.
这里用父类定义的对象,实例化时用子类,则实际使用子类的函数
class Test
{
internal int data;
public virtual void SetData(int data) {
this.data = data;
}
public int GetData() {
return data;
}
}
class T1 : Test
{
public override void SetData(int data) {
this.data = data * data;
}
}
static void Main(string[] args)
{
Test test1 = new Test();
Test test2 = new T1();
Console.WriteLine("测试对象里面的函数");
test1.SetData(6);
Console.WriteLine(test1.GetData());
Console.WriteLine("T1对象");
test2.SetData(6);
Console.WriteLine(test2.GetData());
}
2.
运行效果如下: