1.里氏替换原则

1.里氏替换原则:在一个软件系统中,如果子类出现在父类出现的位置,而整个软件功能又没有影响,那么咱们称为里氏替换。

2.

考试题:父类变量指向子类对象!!

3.里氏替换  是     设计原则的一种

七种设计原则   ,写成blogs。

4.Is 和as

Is 做类型判定,  要想进行父类对象    到子类  类型的转换,还得用 as

2.目前学过的两种多态

第一种:虚方法实现多态

第二种:抽象方法实现多态

实现面向对象的多态性有哪几种方法?

总共有3种,第一种,虚方法实现多态,  第二种:抽象方法实现多态  第三种:接口实现多态

抽象类可以被继承吗?

可以,不仅可以被普通类继承,也可以被抽象类继承

3,抽象方法可以有方法体吗?

不可以,连花括号都不能有

3.抽象类和抽象方法

1.定义一个抽象类,用abstract 修饰

2.抽象方法不能有方法体,甚至连{}都不能有

3.抽象方法只能存在于抽象类中,但是抽象类中可以有非抽象方法

4.抽象类不能实例化

5.抽象类中抽象方法只是用来规定方法的形式(参数,返回值),约束子类方法的形式

6.抽象类中的抽象成员必须在子类中全部实现,除非子类也是抽象类

7.子类实现抽象方法的快捷键,Ctrl+.(没有输入法情况下 )

6.用虚方法实现多态的步骤

子类重写父类的虚方法

两种方式

创建父类变量,实例化子类对象

把父类类型作为参数类型,该子类及子类对象作为参数传入

运行时,根据实际创建的对象决定执行哪个方法

7.什么是抽象类?

专业人士解析;如果在一个类前加上了abstract关键字,那么该类就称为抽象类

8.快速在子类中生成所有的抽象方法

方式一:在有输入法的情况下,使用Alt+Shift+F10

方式二;在无任何输入法的情况下,使用Ctrl+.

注意事项:01.必须无输入法状态

02.不能点击小键盘的点

9.如果一个类用sealed关键字修饰,那么该类就是密封类

特性:密封类不能被继承

10.如果以类用static修饰,那么该类就是静态类,在静态类中所有成员(成员变量和成员方法)都必须是静态的额

public static class SqlHelper

{

public static string name;

public static void Say()

{

}

}

注意点:

01.在静态方法中不能直接访问非静态的方法或者变量

如果要在静态方法中,访问非静态成员,那么要通过对象名.方法名访问。

11.面向接口编程

。。。

接口是一种比抽象类更加抽象的"类"
(这里为什么会用类,但是加了引用,是因为接口本身不直接是类,在底层编译时会由JVM转换成抽象类)
但是要明确:接口本身就不是类.
接口是用来定义类和之间的协议,它所提供的是一种形式而没有具体实现.
(接口中在jdk8之前是没有方法体的jdk8可以使用default关键字修饰方法)
同时如果有类实现了接口那么必须实现接口中没有实现方法.实现通过关键字implements
interface. --外貌他的实现类代表如何工作.

4.抽象方法和虚方法的区别

虚方法:

1、virtual方法表示此方法可以被重写, 也就是说这个方法具有多态.父类中的方法是通用方法,可以在子类中重写以重新规定方法逻辑. 
2、virtual方法可以直接使用,和普通方法一样 
3、不是必须重写的. 子类可以使用base.方法 的方式调用, 无论有没有在子类使用override(重写关键字)去重写

virtual关键字只是明确标示此方法可以被重写, 其实它和一般的方法没有什么区别 
相应的 
sealed关键字标示此方法不可以被重写,因为是密封类

虚方法和抽象方法的区别:

1.虚方法可以有实现体,抽象方法不能有实现体。

2.抽象方法
    要求派生类必须重载这个方法;

3.抽象方法必须放在抽象类中声明;

虚方法
    告诉编译器,这个方法可以重写。
    当基类的方法与派生类的方法重名时,
    可以选择派生类的方法从基类继承并重写,
    还是,把基类的方法隐藏起来(使用.base)。

虚方法与抽象方法的使用(当多个子类继承同一个基类时):

若基类的中的方法在子类中实现同样的功能则使用虚方法,只要在基类中写一个虚方法的实现就可以了,然后在子类中调用,方便操作;

若子类调用基类的方法实现不同的功能的时候则用抽象类,因为抽象类的方法的实现必须在子类中实现,在子类中写实现就可控度更高。

5. 面向对象的四大特性

封装:保证对象自身数据的完整性和安全性。

继承:建立类之间的关系。

多态:相同的方法调用可实现不同的实现方式。

抽象:

抽象是人们认识事物的常用方法,比如地图的绘制。抽象的过程就是如何简化、概括所观察到的现实世界,并为人们所用的过程。
抽象是软件开发的基础。软件开发离不开现实环境,但需要对信息细节进行提炼、抽象,找到事物的本质和重要属性。
抽象包括两个方面:过程抽象和数据抽象。过程抽象把一个系统按功能划分成若干个子系统,进行"自顶向下逐步求精"的程序设计。数据抽象以数据为中心,把数据类型和施加在该类型对象上的操作作为一个整体(对象)来进行描述,形成抽象数据类型ADT。
所有编程语言的最终目的都是提供一种"抽象"方法。一种较有争议的说法是:解决问题的复杂程度直接取决于抽象的种类及质量。其中,"种类"是指准备对什么进行"抽象"。汇编语言是对基础机器的少量抽象。后来的许多"命令式"语言(如FORTRAN、BASIC和C)是对汇编语言的一种抽象。与汇编语言相比,这些语言已有了较大的进步,但它们的抽象原理依然要求程序设计者着重考虑计算机的结构,而非考虑问题本身的结构。在机器模型(位于"方案空间")与实际解决的问题模型(位于"问题空间")之间,程序员必须建立起一种联系。这个过程要求人们付出较大的精力,而且由于它脱离了编程语言本身的范围,造成程序代码很难编写,而且要花较大的代价进行维护。由此造成的副作用便是一门完善的"编程方法"学科。
为机器建模的另一个方法是为要解决的问题制作模型。对一些早期语言来说,如LISP和APL,它们的做法是"从不同的角度观察世界"、"所有问题都归纳为列表"或"所有问题都归纳为算法"。PROLOG则将所有问题都归纳为决策链。对于这些语言,可以认为它们一部分是面向基于"强制"的编程,另一部分则是专为处理图形符号设计的。每种方法都有自己特殊的用途,适合解决某一类的问题。但只要超出了它们力所能及的范围,就会显得非常笨拙。
面向对象的程序设计在此基础上则跨出了一大步,程序员可利用一些工具来表达问题空间内的元素。由于这种表达非常普遍,所以不必受限于特定类型的问题。人们将问题空间中的元素以及它们在方案空间的表示物称作"对象"。当然,还有一些在问题空间没有对应体的其他对象。通过添加新的对象类型,程序可进行灵活的调整,以便与特定的问题配合。所以在阅读方案的描述代码时,会读到对问题进行表达的话语。与以前的方法相比,这无疑是一种更加灵活、更加强大的语言抽象方法。
总之,OOP允许人们根据问题,而不是根据方案来描述问题。然而,仍有一个联系途径回到计算机。每个对象都类似一台小计算机;它们有自己的状态,而且可要求它们进行特定的操作。与现实世界的"对象"或者"物体"相比,编程"对象"与它们也存在共通的地方:它们都有自己的特征和行为。

C#深入理解多态的更多相关文章

  1. Java--再次理解多态

    Java中多态性(polymorphism)的实现 什么是多态 1. 面向对象的三大特性:封装.继承.多态.从一定角度来看,封装和继承几乎都是为多态而准备的.这是我们最后一个概念,也是最重要的知识点. ...

  2. 更加 "深入" 理解多态

    1.1 public abstract class Birds{ //什么样的方法是抽象方法 public abstract void Fly(); } public class YZ:Birds{ ...

  3. 多态原理探究-从C++编译器角度理解多态的实现原理

    理论知识: 当类中声明虚函数时,编译器会在类中生成一个虚函数表. 虚函数表是一个存储类成员函数指针的数据结构. 虚函数表是由编译器自动生成与维护的. virtual成员函数会被编译器放入虚函数表中. ...

  4. Java学习之理解多态

    Java 多态 多态是同一个行为具有多个不同表现形式或形态的能力.多态就是同一个接口,使用不同的实例而执行不同操作,多态性是对象多种表现形式的体现.例如:可以把人分为男人和女人,男人有做力气活的能力, ...

  5. 工厂方法模式(Method Factory),理解多态应用的好例子.

    工厂方法模式又称为多态性工厂,个人认为多态性工厂更能准确的表达这个模式的用处.与简单工厂(静态工厂)相比较,这里的多态性是指抽象出一个工厂基类,将因为一个产品有N种不同的是现这种变化封装起来,将具体的 ...

  6. java提高篇之理解java的三大特性——多态

    面向对象编程有三大特性:封装.继承.多态. 封装隐藏了类的内部实现机制,可以在不影响使用的情况下改变类的内部结构,同时也保护了数据.对外界而已它的内部细节是隐藏的,暴露给外界的只是它的访问方法. 继承 ...

  7. java提高篇(四)-----理解java的三大特性之多态

    面向对象编程有三大特性:封装.继承.多态. 封装隐藏了类的内部实现机制,可以在不影响使用的情况下改变类的内部结构,同时也保护了数据.对外界而已它的内部细节是隐藏的,暴露给外界的只是它的访问方法. 继承 ...

  8. 理解 Java 的三大特性之多态

    面向对象编程有三大特性:封装.继承.多态. 封装隐藏了类的内部实现机制,可以在不影响使用的情况下改变类的内部结构,同时也保护了数据.对外界而已它的内部细节是隐藏的,暴露给外界的只是它的访问方法. 继承 ...

  9. 初步理解Java的三大特性——封装、继承和多态

    声明:整理自网络,如有雷同,请联系博主处理 一.封装 封装从字面上来理解就是包装的意思,专业点就是信息隐藏,是指利用抽象数据类型将数据和基于数据的操作封装在一起,使其构成一个不可分割的独立实体,数据被 ...

随机推荐

  1. 逐浪CMSv8.2发布-集成Node与Vue脚手架和PowerShell支持的新一代网站管理系统

    极速下载:https://www.z01.com/down/3713.shtml 楼倚霜树外,镜天无一毫. 南山与秋色,气势两相高. -(唐)杜牧 北京时间2020年10月20日:领先的CMS与web ...

  2. 大爽Python入门教程 3-1 布尔值: True, False

    大爽Python入门公开课教案 点击查看教程总目录 1 布尔值介绍 从判断说起 回顾第一章介绍的简单的判断 >>> x = 10 >>> if x > 5: ...

  3. PAT A1091——BFS

    Acute Stroke One important factor to identify acute stroke (急性脑卒中) is the volume of the stroke core. ...

  4. 手动实现一个vue cli

    目录 手动实现一个vue cli 1. 思考准备 2. 我们组织源码将会放在名为src的目录,webpack 打包需要一个入口文件,我们取作 main.js 3. 先预想以下会用到哪些基本依赖,第一个 ...

  5. Windows系统及硬件信息读取

    Windows桌面端开发常常会需要读取系统信息或硬件信息作为用户标识,比如用于确认该设配是否已经激活程序.也可以使用随机生成的UUID来作为唯一标识,但是如果重装系统或重装软件都有可能导致标识丢失,因 ...

  6. SpringMVC---Json的使用

    1.所需文件 2.pom中加入json <?xml version="1.0" encoding="UTF-8"?> <web-app xml ...

  7. airTest小程序自动化踩坑记(android设备)

    一:怎么开启微信小程序的webview调试定位元素 操作如下(android设备): 1.打开X5内核的方法在聊天窗口任意输入"http://debugx5.qq.com" 点击& ...

  8. 《程序员漫画》| 萌新面试Google

    Hello,大家好.今天的更新有点不一样.我给大家带来了一些程序员漫画.这些都是我自己画的哦.希望大家喜欢. 今天的漫画有简约的画风,也有一些写实的风格(漂亮MM总是有特殊待遇).不知道大家喜欢哪种呢 ...

  9. 解决texlive化学式转换镜像经常偶发性进程堆积导致卡顿问题

    前言 之前在 使用Python定时清理运行超时的pdflatex僵尸进程 博文中我采用python脚本开启定时任务清理pdflatex僵尸进程,线上4u2G的k8s pod部署了3个,pdflatex ...

  10. AT4168 [ARC100C] Or Plus Max

    从\(whk\)回来了. 考虑我们需要维护一个子集的信息. 对于二进制的子集信息维护有一个很经典的操作: 高维前缀和. AT4168 [ARC100C] Or Plus Max // Problem: ...