黑马程序员技术交流社区

标题: 抽象方法 [打印本页]

作者: 李伟斌    时间: 2012-12-3 21:33
标题: 抽象方法
抽象方法
       由于抽象类本身表达的是抽象的概念, 因此类中的许多方法并不一定要有具体的实  现, 而只是留出一个接口来作为派生类重载的界面.
       一个方法声明中如果加上 abstract 修饰符, 我们称该方法为抽象方法(abstract   method).
       如果一个方法被声明为抽象的, 那么该方法默认也是一个虚方法,  事实是, 抽象方 法是一个新的虚方法, 他不提供具体的方法实现代码, 我们知道, 非虚的派生类要求通过重  载为继承的虚方法提供自己的实现, 而抽象方法则不包含具体的实现内容, 所以方法声明    的执行体中只有一个分号  ";" .
   
        只能在抽象类中声明抽象方法, 对抽象方法, 不能在使用 static 或 virtual 修饰符, 而且方法不能有任何可执行代码, 只需要给出方法的原型就可以了.
using System;
abstract class Vehicle
{
public int wheels;
public int weight;
public Vehicle(){}
public Vehicle(int wheels,int weight)
{
     this.wheels=wheels;
     this.weight=weight;
}
public abstract void Speak();
}
class Car : Vehicle
{
public int passengers;
public Car(int wheels,int weight,int passengers):base(wheels,weight)
{
     this.wheels=wheels;
     this.weight=weight;
     this.passengers=passengers;
}
public override void Speak()
{
     Console.WriteLine("the car Di-Di");
}
}
class Truck : Vehicle
{
public int load;
public Truck(int wheels,int weight,int load):base(wheels,weight)
{
     this.wheels=wheels;
     this.weight=weight;
     this.load=load;
}
public override void Speak()
{
     Console.WriteLine("the truck Ba-Ba");
}
}
class Program
{
static void Main()
{
     Car c=new Car(4,3,5);
     c.Speak();
     Truck t=new Truck(10,5,50);
     t.Speak();
}
}
    抽象方法在派生类中不能使用 base 关键字来进行访问, 例如,下面的代码在编译时会出错
    abstract class A
    {
       public abstract void F();
    }
    class B : A
    {
       public override void F()
       {
           base.F();    //错误,  base.F()  是抽象方法
       }
    }
    还可以利用抽象方法来重载基类的虚方法, 这是基类中虚方法的执行代码就被"拦截"了.
   
    class A
    {
       public virtual void F()
       {
           Console.WriteLine("A.F()");
       }
    }
    abstract class B : A
    {
       public abstract override void F();
    }
    class C : B
    {
       public override void F()
       {
           Console.WriteLine("C.F()");
       }
    }
       类 A 声明了一个虚方法 F(), 派生类 B 使用抽象方法重载了 F(),  这样 B 的派生类 C 就可以重载 F() 并提供自己的实现.
作者: 许庭洲    时间: 2012-12-3 22:20
值得学习ing!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2