多态
多态
概念:让一个对象能够表现出多种状态(类型)
实现多态的3种手段:1、虚方法2、抽象类3、接口
1、虚方法
步骤:1)首先把父类的方法标记为虚方法:使用关键字virtaul,这个函数可以被子类重新写一遍。子类函数前写override
2)抽象类
如果父类中的方法不知道如何去实现时可以把它写成抽象类,方法写成抽象方法,用关键字abstract,抽象方法不能有任何实现。
a抽象成员必须标记为abstract,并且不能有任何实现。
b抽象成员必须在抽象类中。
c抽象类不能被实例化
除非子类也是一个抽象类,则可以不重写
d抽象成员的访问修饰符不能是private
e在抽象类中可以包含实例成员。并且抽象类的实例成员可以不被子类实现。
f抽象类是有构造函数的。虽然不能被实例化。
g如果父类的抽象方法中有参数,那么。继承这个抽象父类的子类在重写父类的方法的时候必须传入对应的参数,如果抽象父类的抽象方法中有返回值,那么子类在重写这个抽象方法的时候也必须要传入返回值。
=====
如果父类中的方法有默认的实现,并且父类需要被实例化,这时可以考虑父类定义成一个普通类,用虚方法来实现。
如果父类中的方法没有默认实现,父类也不需要被实例化,则可以交该类定义为抽象类。
//使用多态求矩形的面积和周长以及圆形的面积和周长。
Shape shape=new Circle(5);
shape.GetArea();
shape.GetPerimeter();
public abstract class Shape
{
public abstract double GetArea();
public abstract double GetPerimeter();
}
public calss Circle:shape
{
public Circle(double r)
{
this.R=r;
}
private double _r;
public double R
{
get{return _r;}
set{_r=value;}
}
public override double GetArea()
{
return Math.PI*this.R*this.R;
}
public override double GetPerimeter()
{
return 2*Math.PI*this.R;
}
}