多态抽象类实现(c#)

using System;
namespace Shape {
    public abstract class Shape {//创建一个Shape的抽象类
        public abstract double getL();//定义抽象类中的抽象方法,在抽象类的子类中必须有对应的方法
        public abstract double getS();//所有图形都由周长和面积
    }
    class Triangle : Shape {//三角形
        private double line1,line2,line3;
        public double getLine1()
        {
            return line1;
        }

        public void setLine1(double line1)
        {
            this.line1 = line1;
        }

        public double getLine2()
        {
            return line2;
        }

        public void setLine2(double line2)
        {
            this.line2 = line2;
        }

        public double getLine3()
        {
            return line3;
        }

        public void setLine3(double line3)
        {
            this.line3 = line3;
        }



        public Triangle(double line1, double line2, double line3)
        {
            
            this.line1 = line1;
            this.line2 = line2;
            this.line3 = line3;
        }

        public override double getL() {
            return line1+line2+line3;
        }
        public override double getS() {
            double p = (line1 + line2 + line3) / 2;
            return Math.Sqrt(p*(p-line1)*(p-line2)*(p-line3));
        }

    }
    class Circle :Shape{//圆形
        private double radius;
        public static double PI = 3.1415926;
        public double getRadius() {
		return radius;
	}

	public void setRadius(double radius) {
		this.radius = radius;
	}
	

	public Circle(double radius) {
		
		this.radius = radius;
	}


	public override  double getL() {
	
		return PI*radius*2;
	}


	public override double getS() {
		// TODO Auto-generated method stub
		return PI*radius*radius;
	}


    
    
    }
    class Square : Shape {//正方形
	private double a;

	public double getA() {
		return a;
	}

	public void setA(double a) {
		this.a = a;
	}

	public Square(double a) {
		
		this.a = a;
	}


	public override double getL() {
		
		return a*4;
	}


	public override double getS() {
	
		return a*a;
	}
    


	
	

}
    class TestShape{
        static void Main(string[] args)
        {
            Shape []s= {new Triangle(6,8,10),new Square(1),new Circle(1) };//创建一个Shape数组实例化子类对象
		    foreach(Shape shape in s) {//运用foreach循环来输出这些图形的周长和面积
                System.Console.WriteLine(shape.getL()+"\t"+shape.getS());
		
		}
            Console.ReadKey();


        }
    
    
    }
    
}


猜你喜欢

转载自blog.csdn.net/rj2017211811/article/details/82983244