C# 继承
需求:定义多个N变形类,功能:打印多边形类型,计算面积,计算周长。
分析多边形性质:每种多边形计算面积和计算周长的方法不一致。
完成功能需求,每中类型的多边形类至少要定义三个方法
(1)打印类型方法
(2)计算面积方法
(3)计算周长方法
定义一个多边形基类,然后每种具体的多边形继承与多边形基类,按照自己特有性质,分别重写计算方法
下面例子:定义了一个多边形了,一个三角形类,一个正方形类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace InheritPro
{
// 定义多边形基类
public class PolygonClass
{
protected string polygonType = "";
//初始化
public PolygonClass()
{ }
// 定义 Set、Get 方法给变量赋值
public string PolygonType
{
get { return polygonType; }
set { polygonType = value; }
}
//定义计算面积的虚方法,具体实现要在子类中重写
//声明虚方法必须加关键字 virtual,否则无法在子类中重写
//子类可以不重写基类的虚方法
public virtual float Area()
{
return 0;
}
//定义计算周长的虚方法,具体实现要在子类中重写
public virtual float Circumference()
{
return 0;
}
//打印多边形类型
public virtual void Type()
{
Console.WriteLine("The polygon is : " + polygonType);
}
}
// 多边形实例 - 三角形类,继承多边形类
public class TriangleClass : PolygonClass
{
private int edge1; //三角形三条边
private int edge2;
private int edge3;
public TriangleClass() { }
// 定义方法给边赋值
public void SetEdge(int edge1, int edge2, int edge3)
{
this.edge1 = edge1;
this.edge2 = edge2;
this.edge3 = edge3;
}
//重写计算面积方法,必须要加关键字 override
public override float Area()
{
float s = (edge1 + edge2 + edge3) * 0.5f;
float area = (float)Math.Sqrt(s * (s - edge1) * (s - edge2) * (s - edge3));
return base.Area();
}
//重写周长算法
public override float Circumference()
{
return edge1 + edge2 + edge3;
}
//重写打印类型的方法
public override void Type()
{
base.Type(); //调用基类的方法
Console.WriteLine("啦啦啦 我是 三角形");
}
}
public class SquareClass : PolygonClass
{
public int edge;
public SquareClass() { }
public void SetEdge(int edge)
{
this.edge = edge;
}
public override float Area()
{
return edge * edge;
}
public override float Circumference()
{
return edge * 4;
}
}
class Program
{
static void Main(string[] args)
{
#region PolygonClass TriangleClass
//定义基类,可以实例化为 子类 TriangleClass 的实例
PolygonClass polygonClass = new TriangleClass();
//调用基类方法 PolygonType
polygonClass.PolygonType = "Triangle";
//由于 SetEdge 方法是在子类 TriangleClass 中定义的,
//调用 SetEdge 方法时需要强制转换为 TriangleClass类型
((TriangleClass)polygonClass).SetEdge( 3, 4, 6);
//调用求面积,求周长方法,实际调用的是 TriangleClass
//类中重写的 Area()、Circumference() 方法
float area = polygonClass.Area();
float circ = polygonClass.Circumference();
//调用基类的 Type() 方法
polygonClass.Type();
Console.WriteLine(string.Format("area = {0}, circ = {1}", area, circ));
Console.WriteLine("\n");
#endregion
#region PolygonClass SquareClass
//同上将基类实例直接实例化为 子类 SquareClass 的实例
polygonClass = new SquareClass();
polygonClass.PolygonType = "Triangle";
((SquareClass)polygonClass).SetEdge(5);
area = polygonClass.Area();
circ = polygonClass.Circumference();
polygonClass.Type();
Console.WriteLine(string.Format("area = {0}, circ = {1}", area, circ));
Console.WriteLine("/n");
#endregion
#region SquareClass
//老老实实的定义 SquareClass 类实例
SquareClass squareClass = new SquareClass();
squareClass.PolygonType = "Triangle";
squareClass.SetEdge(5);
area = squareClass.Area();
circ = squareClass.Circumference();
squareClass.Type();
Console.WriteLine(string.Format("area = {0}, circ = {1}", area, circ));
Console.WriteLine("\n");
#endregion
Console.WriteLine("Polygon");
Console.Read();
}
}
}