抽象类、抽象方法、抽象属性

来源:互联网 发布:u盘数据恢复后打不开 编辑:程序博客网 时间:2024/04/27 03:38

在一个类前面加上“abstract”关键字,此类就成为了抽象类。一个方法类前面加上“abstract”关键字,此方法就成为了抽象方法。

抽象类一般用于表达一种比较抽象的事物,比如前面所说的“水果”,而抽象方法则说明此抽象类应该具有的某种性质,比如Fruit 类中有一个抽象方法GrowInArea(),说明水果一定有一个最适合其生长的地区,但不同的水果生长地是不同的。

abstract class Fruit //抽象类
{
public abstract void GrowInArea(); //抽象方法不能有实现代码,在函数名后直接跟一个分号。
}

抽象类专用于派生出子类,子类必须实现抽象类所声明的抽象方法,否则,子类仍是抽象类。

从同一抽象类中继承的子类拥有相同的方法(即抽象类所定义的抽象方法),但这些方法的具体代码每个类都可以不一样。
class Apple : Fruit //苹果
{
  public override void GrowInArea()
  {
    Console.WriteLine("南方北方都可以种植我。");
  }
}
class Pineapple : Fruit //菠萝
{
  public override void GrowInArea()
  {
    Console.WriteLine("我喜欢温暖,只能在南方看到我。");
  }
}
注意上述代码中的override 关键字,这说明子类重写了基类的抽象方法。抽象类不能创建对象,一般用它来引用子类对象。
Fruit f;
f = new Apple();
f.GrowInArea();
f = new Pineapple();
f.GrowInArea();
运行结果:
南方北方都可以种植我。
我喜欢温暖,只能在南方看到我。
注意同一句代码“f.GrowInArea();”会由于f 所引用的对象不同而输出不同的结果。可以看到,代码运行结果类似于上一节介绍的“虚方法调用”,两者没有本质差别。
可以按照以下公式编写代码:
抽象类 抽象类变量名=new 继承自此抽象类的具体子类名();

一个抽象类中可以包含非抽象的方法和字段。因此:包含抽象方法的类一定是抽象类,但抽象类中的方法不一定是抽象方法。

除了方法可以是抽象的之外,属性也可以是抽象的,请看以下代码:
abstract class Parent
{
  public abstract String Message //抽象属性
  {
    get;
    set;
  }
}
class Child : Parent
{
  private String _msg;
  public override String Message
  {
    get
    {
      return _msg;
    }
    set
    {
      _msg=value;
    }
  }
}
使用代码:
Parent p = new Child();
p.Message = "Hello";

0 0
原创粉丝点击