目录
1.实例目标
了解虚方法的定义以及使用
2.编程思路
2.1 如果方法声明中包含修饰符virtual,就称该方法为虚方法;
2.2 虚方法的实现会随着子类改变,子类的虚方法的实现过程叫做重载;
2.3 虚方法在程序运行期才能决定要调用的实现方法,而非虚方法的调用,在程序的编译期就已决定了;
2.4 在声明虚方法时,不能使用修饰符 static/abstract/override;
2.5 在基类Geometry中定义虚方法Area,因为计算公式不同,所以在Geometry的子类Circle/Sphere/EquilatralTriangle中重载了Area方法。
3.编程步骤
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace PRO20
{
class Area
{
public class Geomtry
{
public const double p1 = Math.PI;
protected double r;
public Geomtry()
{
}
public Geomtry(double x)
{
r = x;
}
//求面积,虚方法,子类可重载该方法
public virtual double Area()
{
return r * r;
}
//圆
public class Circle : Geomtry
{
public Circle(double r) : base(r)
{
}
//重载求面积方法
public override double Area()
{
return p1*r*r;
}
}
//球体
public class Sphere : Geomtry
{
public Sphere(double r) : base(r)
{
}
//重载求面积方法
public override double Area()
{
return 4*p1*r*r;
}
}
//等边三角形
public class EquilateralTriangle : Geomtry
{
public EquilateralTriangle(double r) : base(r)
{
}
//重载求面积的方法
public override double Area()
{
return r*r*Math.Sin(p1/3.0)/2.0;
}
}
public static void Main()
{
double r = 4.0;
Geomtry a = new Geomtry(r);
Geomtry c = new Circle(r);
Geomtry s = new Sphere(r);
Geomtry et = new EquilateralTriangle(r);
Console.WriteLine("r={0},相应地",r);
Console.WriteLine("正方形的面积为:{0}", a.Area());
Console.WriteLine("圆的面积为:{0}", c.Area());
Console.WriteLine("球体的表面积为:{0}", s.Area());
Console.WriteLine("等边三角形的面积为:{0}", et.Area());
Console.ReadKey();
}
}
}
}