【大话设计模式】封装 继承 多态

目录

封装

概念

好处

继承

概念

那什么是基类和派生类呢?

1、基类和派生类的基本概念

2、调用基类的构造函数

学习继承需记住

继承的优点

继承的缺点

多态

概念

注意

多态的原理

虚方法

概念

虚方法的使用

方法重写


封装

概念

每个对象都包含它能进行操作所需要的所有信息,这个特性成为封装 。因此对象不必依赖其他对象来完成自己的操作

好处

  1. 良好的封装能够减少耦合
  2. 类内部的实现可以自由地修改
  3. 类具有清晰的对外接口

继承

概念

继承定义了如何相互关联、共享特性。继承的工作方式是:定义父类和子类,或叫做基类和派生类,其中子类继承父类的所有特性。子类不但继承了父类的所有特性,还可以定义新的特性。当两个类之间具备‘is-a’的关系时,就可以考虑用继承了

注:子类从它的父类中继承的成员有方法、域、属性、事件、索引指示器,但对于构造方法,它不能被继承,只能被调用。对于调用父类的成员,可以用base关键字

那什么是基类和派生类呢?

当创建一个类的时候,程序员不需要完全重新编写新的数据成员和成员函数,只需要设计一个新的类,继承了已有的类的成员即可。这个已有的类被称为基类,这个新的类被称为派生类

1、基类和派生类的基本概念

class B : A{}

A是基类,B是派生类

一个类最多只允许从一个类中派生

class C : B{}

B还可以充当C的派生类

继承总是隐式为public的,System.Object是所有类的根

编译器会把你的类悄悄的编译成class A : System.Object{}

2、调用基类的构造函数

class B:A
{
	public B():base(){}
    public B(string sqlstr):base(sqlstr){}
}

创建派生类的语法

<访问修饰符> class <基类>
{
	
}
class <派生类> : <基类>
{
	
}

一个类可以派生自多个类或接口,这意味着它可以从多个基类或接口继承数据和函数

学习继承需记住

如果子类继承与父类,第一、子类拥有父类非private的属性和功能;第二、子类具有自己的属性和功能,即子类可以扩展父类没有的属性和功能;第三、子类还可以以自己的方式实现父类的功能(方法重写)。说来说去,就一句话——儿子要比老子厉害

继承的优点

  • 使得所有子类公共的部分都放在了父类
  • 使得代码得到了共享,避免了重复
  • 可使得修改或扩展继承而来的实现都较为容易

继承的缺点

  • 父类变,子类不得不类
  • 继承会破坏包装,父类实现细节暴露给子类,其实就是增大了两个类之间的耦合性

耦合性:是对一个软件结构内部不同模板间联系紧密程度的度量指标。简单的来说,就是藕断丝连,两个类尽管分开,但如果关系密切,一方的变化都会影响到另一方,这就是耦合性高的表现。继承显然时一种类与类之间强耦合的关系

多态

概念

多态表示不同的对象可以执行相同的动作,但要通过它们自己的实现代码来执行

注意

  • 子类一父类的身份出现
  • 子类在工作时以自己的方式来实现
  • 子类以父类的身份出现时,子类特有的属性和方法不可以使用

多态的原理

当方法被调用时,无论对象是否被转换为其父类,都只有位于对象继承链最末端的方法实现会被调用,也就是说,虚方法是按照其运行时类型而非编译时类型进行动态绑定调用的

在使用多态的时候,我们用到了虚方法和方法重写

虚方法

概念

针对抽象方法引出的问题:如果需要在父类中提供一个方法,该方法有自己的方法体,子类根据自己的需要决定是否重写该方法,而不是必须重写,这既是虚方法

  • 用virtual修饰
  • 要有方法体,哪怕是一个分号
  • 可以被子类override
  • 除了封装类都可以写

虚方法的使用

  1. 抽象方法仅仅是声明,没有任何实现内容,抽象方法一般必须在子类中被重写以后才有使用价值
  2. 使用关键字virtual修改它的虚方法

方法重写

子类可以对父类进行重写,但是返回值和形参不变

猜你喜欢

转载自blog.csdn.net/weixin_45490023/article/details/119751584