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. 菜鸡的Java笔记 第三十七 - java 线程与进程

    线程与进程        线程与进程的区别                最早的的时候DOS 系统有一个特点:只要电脑有病毒,那么电脑就死机了,是因为传统的DOS 系统属于单进程的操作系统       ...

  2. vue+node+mongondb实战之mongodb登陆操作

    页面搭建基本完成,只是样式还没有美化,由于采取的前后端分离开发,所有页面逻辑全部由vue来负责,后台采用express框架只用来提供 接口,注册就是讲数据存入数据库,比较简单,而登陆碰了一些小问题,发 ...

  3. 关于linux系统密码策略的设置

    由于工作需要最近需要将公司的多台linux服务器进行密码策略的设置,主要内容是增加密码复杂度. 操作步骤如下,不会的同学可以参考: 操作前需要掌握如下几个简单的知识点:(其实不掌握也行,不过学学没坏处 ...

  4. Spring Aop面向切面编程&&自动注入

    1.面向切面编程 在程序原有纵向执行流程中,针对某一个或某一些方法添加通知,形成横切面的过程叫做面向切面编程 2.常用概念 原有功能:切点,pointcut 前置通知:在切点之前执行的功能,befor ...

  5. Java编程之学习技巧

    **本人博客网站 **IT小神 www.itxiaoshen.com 找到技术点 首先得知道自己要学习技术是什么?不管是来自同事.技术大牛推荐还是通过搜索引擎得到,或者另有出处如.技术交流群.技术论坛 ...

  6. 联盛德 HLK-W806 (五): W801开发板上手报告

    目录 联盛德 HLK-W806 (一): Ubuntu20.04下的开发环境配置, 编译和烧录说明 联盛德 HLK-W806 (二): Win10下的开发环境配置, 编译和烧录说明 联盛德 HLK-W ...

  7. YAPI接口自动鉴权功能部署详解

    安装准备 以下操作,默认要求自己部署过yapi,最好是部署过yapi二次开发环境. 无论是选择在线安装或者是本地安装,都需要安装client工具. 1.yapi-cli:npm install yap ...

  8. Linux 使用wpa_supplicant手动配置连接wifi

    Linux 使用wpa_supplicant手动配置连接wifi wpa_supplicant 简介 wpa_supplicant是Linux BSD, Mac OSX和Windows的WPA的服务, ...

  9. Codeforces 1109F - Sasha and Algorithm of Silence's Sounds(LCT)

    Codeforces 题面传送门 & 洛谷题面传送门 讲个笑话,这题是 2020.10.13 dxm 讲题时的一道例题,而我刚好在一年后的今天,也就是 2021.10.13 学 LCT 时做到 ...

  10. 洛谷 P3714 - [BJOI2017]树的难题(点分治)

    洛谷题面传送门 咦?鸽子 tzc 竟然来补题解了?incredible( 首先看到这样类似于路径统计的问题我们可以非常自然地想到点分治.每次我们找出每个连通块的重心 \(x\) 然后以 \(x\) 为 ...