C# 面向对象之抽象类抽象方法

            一、抽象

1.1、语法:

用abstract修饰类即为抽象类.

抽象类中可能包含抽象成员(方法,属性)这些都是共性的可以为空,可以没有抽象成员,可以有抽象成员

抽象类不能创建对象【不能实例化,不能New】 可以被继承!可以创建数组

定义:

调用:

1.2、语义(了解):

抽象类表示一个抽象概念(数据和行为整体).

表达概念中拥有的共性行为数据.

抽象只表示做什么,拥有什么数据,但往往不表达具体做法,不表达数据具体取值

用于做基类,统一所有子类,管理子类.

调用:

1.3 、什么时候适合用抽象类

  1. 》希望做基类,对多个类进行统一管理【类将再分类】
  2. 使用抽象类的根本原因(也是什么时候使用抽象方法)

需求分析时找角色找共性时,找的共性中字段;有方法,

方法中有些方法/有些行为不同子类可能具体实现不同,父类中的这个行为就没必要实现!!

这个行为需要写成抽象的,从而这个类也要变成抽象类。

                   二、抽象方法

1》 定义:只有声明【定义】,没有实现的方法 就是抽象方法。

2》特点:实现类必须实现所有的抽象方法  B:A;  抽象方法必须放在抽象类中或者接口中。

      但是子类也是抽象,父类的抽象方法不实现可以吗?可以。

             

3》 放在抽象中的抽象方法 必须 加abstract 不能私有

  实现类实现抽象方法的方法 必须 override 不能私有

 抽象方法的重写 =抽象方法的实现

抽象方法只做什么,但往往不表达具体做法

注意:抽象类 抽象方法,子类 实现为虚方法 不可以

                             

                           三、比较抽象方法与虚方法

下面左边基类是利用抽象方法,右边基类是用的虚方法分别计算圆、三角形、矩形的面积:

调用一样:

那什么时候用抽象方法?什么时候用虚方法呢?

上面图片的代码也是面向对象设计原则之一:氏替换原则 (继承后的重写)

出现地方可以被子类替换掉,要保护替换前的原有的工作,在替换后依然保持不变子类在重写父类方法时,尽量选择扩展重写

但是对于求面积的案例来说用抽象方法比较好,因为父类中的方法子类都没有用到。

抽象方法和虚方法区别:

           从定义来说:抽象方法:只有声明【定义】,没有实现的方法 就是抽象方法;虚方法:用vritual关键修饰的已经实现的方法

            语法说:  抽象方法:实现类必须实现【重写】;虚方法:可以重写也可以不重写

 

发布了122 篇原创文章 · 获赞 13 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_40229737/article/details/104009527
今日推荐