C# 中的抽象类

举报
陈言必行 发表于 2021/08/13 23:15:08 2021/08/13
【摘要】 抽象:笼统,模糊,看不懂,不明白 抽象类的特点: 1.如果一个类中只存在着只有方法声明但是没有方法体(没有实现)。那么这个方法就是抽象方法。而方法所在的类一定是抽象类,这时候他们都需要abstract来修饰。 2.抽象类能不能被实例化?抽象类不能被实例化(创建对象),因为抽象方法中方法没实现。 3.抽象类必须由他的...
抽象:笼统,模糊,看不懂,不明白

抽象类的特点:
1.如果一个类中只存在着只有方法声明但是没有方法体(没有实现)。那么这个方法就是抽象方法。而方法所在的类一定是抽象类,这时候他们都需要abstract来修饰。
2.抽象类能不能被实例化?抽象类不能被实例化(创建对象),因为抽象方法中方法没实现。
3.抽象类必须由他的子类覆盖(重写)了抽象类中的所有抽象方法后,才可以实例化他的子类。子类必须实现所有的抽象方法

抽象类的细节:
1.抽象类中有没有构造函数?有,用于创建子类对象初始化父类用的。
2.抽象类中可以不定义抽象方法吗?可以。
3.abstract关键字不能和那些关键字共存? private sealedstatic
4.抽象类和普通类的区别?
相同点:抽象类和普通类有事用来描述事物的,都可以在类的内部定义任何成员(方法,属性,字段,构造函数)。
不同点:
a.普通类有足够的信息去描述事物,抽象类描述食物可能信息不足
b.普通类中不能定义抽象方法,只能定义非抽象的;抽象类两种皆可定义。
c.普通类可以被实例化:抽象类不能被实例化
5.抽象类一定是个父类吗?
是的,抽象类只有被子类继承后覆盖其所有的方法后才能实例化其子类对象
 

    
  1. abstract classAnimal
  2. {
  3. publicinta = 3;
  4. publicabstractvoidEat();
  5. }
  6. class Dog: Animal //子类继承抽象类
  7. {
  8. publicoverridevoidEat()//重新实现Eat方法
  9. {
  10. Console.WriteLine("啃骨头"+ a);
  11. }
  12. }
  13. class Demo
  14. { static viodMain(string[]args)
  15. {
  16. newDog().Eat(); //只有实例化子类才可以调用方法
  17. }
  18. }


抽象类的特点:
抽象类和抽象方法必须用abstract关键字来修饰。
抽象方法只有方法声明,没有方法体,定义在抽象类中。格式:修饰符abstract返回值类型函数名(参数列表)。
抽象类不可以被实例化,也就是不可以用new创建对象。因为抽象类是具体事物抽取出来的,本身是不具体的,没有对应的实例。例如:犬科是一个抽象的概念,真正存在的是狼和狗。 抽象类通过其子类实例化,而子类需要覆盖(重写)抽象类中所有的抽象方法后才可以创建对象,否则该子类也是抽象类。 抽象类里面可以有非抽象方法。

抽象类与普通类的区别:

抽象类声明时要使用abstract关键字来定义,而普通类不需要。

抽象类里的抽象方法不能有方法主体,只能有方法的声明。

抽象类被继承时、子类必须重新实现它的所有抽象方法,而普通类不需要。

抽象类里面大多数情况下要有抽象方法,而普通类里面一定没有抽象方法。

使用场景:
当父类中的方法不知道如何实现的时候,就可以考虑将父类写成抽象类,将方法写成抽象方法,
如果父类中的方法有默认实现,并且父类需要被实例化,这时可以考虑将父类定义成为一个普通类,用虚方法实现多态
如果父类中的方法没有默认实现,父类也不需要被实例化,则可将该类定义为抽象类

文章来源: czhenya.blog.csdn.net,作者:陈言必行,版权归原作者所有,如需转载,请联系作者。

原文链接:czhenya.blog.csdn.net/article/details/76092172

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。