C#抽象类

来源:互联网 发布:sql数据库设计 编辑:程序博客网 时间:2024/06/14 07:59

C#抽象类

++++思考: 使用我们学习过的知识如何实现下面结构关系?

                         运动员

                         +训练()

     足球运动员         游泳运动员        短跑运动员

       +训练()            +训练()             +训练()


++++实现:

 

class Player{

    publicvirtualvoid Pratice(){

        Console.WriteLine(Players Practice!);

}

}

 

class FootBallPlayer:Player{

    publicoverridevoid Practice(){

        Console.WriteLine(FootBallPlayers Practice!);

}

}

此处省略SwimmingPlayerRunnerPlayer类的实现。

 

class MainClass{

    public static void Main(string[] args)

    {

        Playerplayer =new FootBallPlayer();

        player.Practice();

        //Playerplayer =new SwimmingPlayer();

        //Playerplayer =new RunnerPlayer();

}

}

 

//控制台打印结果为:FootbalPlayers Practice

 

++++我们可以发现,基类中的Practice方法只起到声明的作用,方法当中的代码块我们并没有使用。

++++当父类当中某个方法在不同子类当中必须有不同的实现,那么父类当中的方法就没有实现的必要。像这样的方法我们通常将该方法声明为抽象方法。 例如以上的例子Player当中的Practice方法。


++抽象类

++++抽象方法: 在面向对象编程语言中抽象方法是指一些只有方法的声明而没有具体实现的方法。

++++抽象方法使用关键字abstract关键字修饰,这种方法只能声明返回值类型,方法名以及参数列表,没有方法体。

++++格式: 访问修饰符abstract方法名(参数列表);

++++例如:

abstract class Player{

    public abstract void Practice();

}

--注意: 当一个类当中存在抽象方法时,该类必须也使用abstract修饰。


++抽象方法特性

++++1、抽象方法是隐式的虚方法。

++++2、抽象方法只能有声明不提供实际的实现。

++++3、只允许在抽象类中使用抽象方法声明。

++++4、抽象方法必须被子类重写并实现,否则其子类依旧为抽象类。

++++5、抽象方法不使用staticvirtual修饰。


++抽象方法作用

++++抽象方法的意义在于规定基类的派生类当中必须拥有这样的功能,或者是提供这样子的服务,但是实现该功能的方式会因为子类的不同而结构不同。

++++注意: 抽象方法的访问修饰符不能为private。 因为抽象方法必须被派生类重写,派生类必须能够访问到。


++abstract关键字

++++1abstract修饰符指示所修饰的内容缺少实现或未完全实现。

++++2abstract可以用来修饰类,方法,属性,索引器和事件。

++++3、在类的声明中使用abstract来修饰类表示该类为抽象类,只能是其他类的基类。

++++4、利用abstract关键字可以将方法声明抽象到父类当中,而方法的实现留在子类,更好的体现 “共性放在父类”的原则。


++抽象类

++++抽象类是用来表征对问题,对象的分析,设计出来的抽象概念,是一系列看上去不同,但是本质上相同的具体概念抽象。

++++抽象类在类的声明当中使用abstract关键字修饰。

++++格式:  类访问修饰符abstract class类名{类成员}

++++例如:

publicabstractclass Animal(

    publicstring type;

    publicabstractvoid Eat();

)


++抽象类的特性

++++1、抽象类不能使用new关键字进行实例化,抽象类是不完整的,只能作为基类被其他类继承。

++++2、抽象类除了可以拥有普通类成员外还可以有抽象方法。

++++3、从抽象类派生的非抽象类必须实现抽象类当中的所有抽象方法。

++++4、抽象类不能被实例化但可以有构造方法,构造方法不能为抽象方法。

++++5、不能使用sealed修饰符修饰抽象类,因为采用sealed修饰符的类是无法被继承的,而抽象类是必须被继承的。


++抽象类的使用

++++抽象类不能实例化,必须被子类继承。当抽象类当中有抽象方法时必须重写抽象方法。

++++例如: 定义抽象类动物类

 

publicabstractclass Animal{

    publicstring type;

    publicstring color;

 

    //抽象类可以有构造方法

    public Animal(string type, string color){

        this.type = type;

        this.color = color;

}

publicabstractvoid Eat(); //定义抽象方法

}

 

--非抽象类继承抽象类并实现抽象方法

 

public class Cat:Animal{

    public string name;

 

    //调用抽象类的构造方法

    public Cat(stringname,stringcolor,stringtype) :base(type, color){

        this.name = name;

}

 

//实现抽象方法

publicoverridevoid Eat(){

    Console.WriteLine(猫喜欢吃鱼);

}

}

 

public static void Main(string[] args)

{

    Cat cat = newCat(Candy,White,大脸猫);

    cat.Eat();

}

//打印结果: 猫喜欢吃鱼


++总结

++++1、抽象类与抽象方法都使用abstract关键字修饰。

++++2、抽象方法必须存在于抽象类当中,抽象类中可以有抽象方法也可以没有抽象方法。

++++3、抽象类不可以实例化,但是可以有构造方法。

++++4、为了更好的体现“共性放在父类”原则,当同一方法在不同类当中有不同实现时,就可以将该方法抽象到某个抽象类当中。



--_--VRunSoft:lovezuanzuan--_--

原创粉丝点击