C#之抽象类和抽象方法

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yyp0304Devin/article/details/84667949

一、前言

在学习C#的时候经常会看到一个名词“抽象类”,那什么是抽象类,抽象类是用来干什么的,在看了很多博客和资料,都说的很官方,理解起来很难,并且好多博客资料都是不断地抄袭抄袭,写的千篇一律,基本都很相似,那下面小编就根据自己的理解说以下抽象来,结合抽象类把抽象方法也说了。

抽象方法:在类中没有方法体的方法,就是抽象方法。

抽象类:含有抽象方法的类就叫抽象类。

二、抽象类

 

 

1、什么是抽象类

 

抽象类中的方法既可以有抽象方法,也可以有非抽象方法,可以全部都是抽象方法,也可以全部都是非抽象方法

 

抽象方法只能出现在抽象类或接口中,不能出现在非抽象类中

 

抽象类和接口不能new对象

 

抽象类可以继承抽象类,也可以继承非抽象类

 

2.概念

 

笼统的,模糊,不具体的类

3.示例图

 

 

 

为什么说笼统的呢?从上图可以看出来,图中有个动物类,那动物类是一个很广的范围, 它只是一个概念,我们很难把动物这个类很具体的表现出来。所以它是一种笼统的,模糊,不具体的类。

4.个人理解

我们可以把抽象类看作是类的集合,把类看成是对象的集合,这样一类我们对抽象类的理解就清晰多了。

 

那抽象类有什么样的特点呢?

 

 

           方法只有声明没有实现,需要被abstract关键字修饰,抽象方法必须定义在抽象类中,该类也必须被abstract关键字修饰

 

           抽象类不可以被实例化,因为调用抽象方法没意义

 

           抽象类必须有其子类覆盖了所有的抽象方法后,才可以被实例化,否则这个子类还是是个抽象类

 

1.抽象方法只能定义在抽象类中,抽象的方法和抽象的类必须由关键字abstract修饰。

2.抽象类值只定义方法声明,不定义功能主题(即方法的实现)。

3.抽象类不可以被创建对象。

抽象类就是一个不存在的东西,人们无法定义它,

抽象方法和抽象类又absctract修饰

5.性质:

 

a、抽象类只能用作其他类的基类,不能建立抽象类对象实例。

 

b、抽象类不能用作参数类型、函数返回类型、或显示转换的类型,

 

但可以声明指向抽象类的指针变量、此指针可以指 向它的派生类,进而实现多态性

 

c、如果在抽象类的派生类中没有重新说明纯虚函数,则该函数在派生类中

 

仍然为纯虚函数,而这个派生类仍然还是一个抽象类。

 

看看实例

//动物类代码

//动物类代码

 public abstract class Animal

        {

            private string _name;

            public string Name

            {

                get { return _name; }

                set { _name = value; }

            }



            private char _gender;

            public char Gender

            {

                get { return _gender; }

                set { _gender = value; }

            }

            private int _age;

            public int Age

            {

                get { return _age; }

                set { _age = value; }

            }

            public abstract void Shout();

             }

           public class Pig : Animal

        {

            public override void Shout()

            {

                Console.WriteLine("哼哼叫");

            }

        }

//客户端代码

static void Main(string[] args)

        {



 Pig pig = new Pig();

            pig.Shout();

            Console.ReadKey();

}

三、抽象方法

为什么要用抽象方法,它有什么好处?

抽象方法是一个模板或约束,避免了子类的随意性,需要实现它的类必须重写它的抽象那个方法。

举个例子

就拿动物的抽象类来说,我们定义一个叫声的方法,我们只知道有个方法,让动物叫,可是动物多了,到底让那个叫我们并不知道,它只是一个抽象的类,不具体,也没有指明让那个对象叫。这也就是说抽象方法为什么没有方法体了,如果有方法体我们就可以准确的知道那个动物叫了,它的叫声什么可以准确的形容出来了。要是我们想要准确的知道某个动物的叫声是什么就要重写它。

猜你喜欢

转载自blog.csdn.net/yyp0304Devin/article/details/84667949