[C#]抽象类
1.抽象类的定义
抽象类是包含抽象方法的类。抽象方法是没有方法内容的,只有一个方法名和参数列表,并以;结尾。为了标注他的与众不同,在他的返回类型前加abstract,并在class之前加abstract。简言之,由abstract修饰的方法和类就是抽象的方法和类。
注:抽象方法一定在抽象类中,但是抽象类中的方法不一定都是抽象方法。范例中有详解。
2.抽象类的特点
- 抽象类只能做父类
- 抽象类不能实例化,即不能用new来产生属于抽象类的对象
- 抽象类中除了抽象方法与普通方法不一样外,其他部分和普通类一样,即抽象类是普通类的特例,他特殊只是有抽象方法,所以它里面可以有字段,属性,普通方法
3.抽象方法的特点
- 抽象方法是没有方法内容的,只有一个方法名和参数列表的方法。并以;结尾
- 在方法的返回类型前加abstract
- 抽象方法的内容有他的继承类根据继承类自身的情况去写。重写这个方法时把abstract替换成override
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
//求图形面积和周长
namespace 抽象类
{
class Program
{
static void Main(string[] args)
{
Shape sp = new Circle(8);//new retangle(4,5)
Console.WriteLine("该圆面积为{0},周长为{1}", sp.Getarea(), sp.Getperimeter());
Shape re = new retangle(4, 5);
Console.WriteLine("矩形面积为{0},周长为{1}",re.Getarea(),re.Getperimeter());
Circle cc = new Circle(4);
double s = cc.Area();//在子类中被重写的方法
double ss = re.Area(5, 6);//抽象类中的普通方法被子类继承,通过实例化子类可以调用该方法,即未被重写
Console.WriteLine("重写的方法{0},未重写的方法{1}", s, ss);
Console.ReadKey();
}
}
public abstract class Shape
{
public abstract double Getarea();
public abstract double Getperimeter();
public virtual double Area(double len, double wid)//抽象类中的普通方法
{
return len * wid;
}
}
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 double Area()//重写该方法,类型前面可以什么都不写
{
return Math.PI * this.R * this.R;
}
}
public class retangle : Shape//矩形周长和面积
{
private double length;//私有字段
private double width;
public double Len//属性,为了保护私有字段不被外部随意改变
{
get { return length; }
set { length = value; }
}
public double Wid
{
get { return width; }
set { width = value; }
}
public retangle(double length,double width)
{
this.length = Len;
this.width = Wid;
}
public override double Getarea()
{
return this.Len * this.Wid;
}
public override double Getperimeter()
{
return 2 * this.Len * this.Wid;
}
}
}

浙公网安备 33010602011771号