c#抽象类不能实例化,为什么代码还可以这样写

static void Main(string[] args)
{
Shape shape = new Circle(5);
double area = shape.GetArea();
double permiter = shape.GetPerimeter();
Console.WriteLine("{0:0.00} {1:0.00}", area, permiter);

Console.ReadKey();
}

//这是抽象类shape的实现
public abstract class Shape
{
public abstract double GetArea();

public abstract double GetPerimeter();

}
为什么这个代码可以运行?circle类的实现我没有放上去。shape这个对象不就是实例吗?为什么说抽象类不能创建实例。

这叫多态的向上转型,基类引用指向派生类的实际对象。shape的实际类型是Circle类的对象。new后面跟哪个类就是哪个类的对象。追问

你这么说我虽然不太懂,但是没那么纠结了

温馨提示:内容为网友见解,仅供参考
第1个回答  2018-03-03
不能实例化,追问

那Main函数中的shape变量不就是实例化之后的抽象类对象吗?

相似回答