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

Posted 王思琪^

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了大话设计模式封装 继承 多态相关的知识,希望对你有一定的参考价值。

目录

封装

概念

好处

继承

概念

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

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修改它的虚方法

方法重写

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

以上是关于大话设计模式封装 继承 多态的主要内容,如果未能解决你的问题,请参考以下文章

大话设计模式——浅谈设计模式基础

《大话设计模式》——读后感 代码无错就是优?——简单工厂模式

java中封装,继承,多态,接口学习总结

《大话设计模式》学习笔记

设计模式之美——封装,继承,多态的意义

封装继承多态