将父类的方法标记为虚方法 ,使用关键字 virtual,这个函数可以被子类重新写一个遍。
点击(此处)折叠或打开
-
namespace _10多态练习
-
{
-
class Program
-
{
-
static void Main(string[] args)
-
{
-
RealDuck rd = new RealDuck();
-
MuDuck md = new MuDuck();
-
XPDuck xd = new XPDuck();
-
RealDuck[] ducks = { rd, md, xd };
-
for (int i = 0; i < ducks.Length; i++)
-
{
-
ducks[i].Bark();
-
}
-
Console.ReadKey();
-
-
}
-
}
-
public class RealDuck
-
{
-
public virtual void Bark()
-
{
-
Console.WriteLine("真的鸭子嘎嘎叫");
-
}
-
}
-
-
public class MuDuck : RealDuck
-
{
-
public override void Bark()
-
{
-
Console.WriteLine("木头鸭子吱吱叫");
-
}
-
}
-
-
public class XPDuck : RealDuck
-
{
-
public override void Bark()
-
{
-
Console.WriteLine("橡皮鸭子唧唧叫");
-
}
-
}
- }
2.抽象类
当父类中的方法不知道如何去实现的时候,可以考虑将父类写成抽象类,将方法写成抽象方法。
点击(此处)折叠或打开
-
namespace _12_抽象类
-
{
-
class Program
-
{
-
static void Main(string[] args)
-
{
-
//使用多态求矩形的面积和周长以及圆形的面积和周长
-
Shape shape = new Square(5, 6); //new Circle(5);
-
double area = shape.GetArea();
-
double perimeter = shape.GetPerimeter();
-
Console.WriteLine("这个形状的面积是{0},周长是{1}", area, perimeter);
-
Console.ReadKey();
-
-
}
-
}
-
-
public abstract class Shape
-
{
-
public abstract double GetArea();
-
public abstract double GetPerimeter();
-
}
-
public class Circle : Shape
-
{
-
-
private double _r;
-
public double R
-
{
-
get { return _r; }
-
set { _r = value; }
-
}
-
-
public Circle(double r)
-
{
-
this.R = r;
-
}
-
public override double GetArea()
-
{
-
return Math.PI * this.R * this.R;
-
}
-
-
public override double GetPerimeter()
-
{
-
return 2 * Math.PI * this.R;
-
}
-
}
-
public class Square : Shape
-
{
-
private double _height;
-
-
public double Height
-
{
-
get { return _height; }
-
set { _height = value; }
-
}
-
-
private double _width;
-
-
public double Width
-
{
-
get { return _width; }
-
set { _width = value; }
-
}
-
-
public Square(double height, double width)
-
{
-
this.Height = height;
-
this.Width = width;
-
}
-
-
public override double GetArea()
-
{
-
return this.Height * this.Width;
-
}
-
-
public override double GetPerimeter()
-
{
-
return (this.Height + this.Width) * 2;
-
}
-
}
-
- }