OOP支柱

3 个核心:封装 继承 多态

封装就是将实现细节隐藏起来,也起到了数据保护的作用。

继承就是基于已有类来创建新类可以继承基类的核心功能。

在继承中

另外一种代码重用是:包含/委托,这种重用不是父子类的继承关系,而是一个类定义为另一个类的成员变量。

一个简单的例子,汽车和收音机,汽车里面有一个收音机,不能说继承,不符合逻辑,只能说是一种对象包含了另一个对象。汽车对象中调用了收音机对象中的方法。

多态就是同一请求,不同的响应操作。

多态

同一种方式处理相关对象的能力。

相同的请求操作不同。

两个原则:里氏替换原则:子类对象能够替换其基类对象被使用。

开放封闭原则:对外扩展开放,对内修改封闭。

定义一个抽象方法,派生类重写抽象方法具体实现。

Aniaml an=new Cat();//开辟一个新空间指向派生类对象

通过创建an 就可以指向多个派生类对象。

an= new dog();

an=new chicken();

创建cat对象,基类指向子类

Public公共的没有限制

Private私有的 本类可用

Protected 本类和子类使用

set get方法就是最基础的封装。

.NET语言提倡使用属性来强制封装状态数据。属性会总是映射到“实际的”访问方法和修改方法。创建了属性会在背后调用相应的get 和set来封装。

封装具有安全性,封装可以方便以后的修改。Get可以表示具有只读属性,Set可以表示具有只写功能。

属性内部表示

如果已经写了封装set get方法又重新定义了set get方法那么编译会出错,基础类库会使用类型属性而不是传统的访问和修改方法。

Public string company//封装没有括号()
{
Get{return companyName;}
Set(companyName=value;)
}//手动属性
public int Num{get;set;}//自动属性

自动属性必修同时支持读写功能。

Const用来定义常量

比如我定义一个π值

Public const double pai=3.14;

Ps:关键字都是加字数据类型前面

Readonly只读字段 和常量相似 不能在赋初始值后改变。

但和常量也有不同的地方。

赋给只读字段的值可以在运行时决定,因此在构造函数中赋值是合法的。例如:

Class{

Public readonly double pi;

Public class(){

Pi=3.14;

}

}

继承与多态

在C#中定义冒号:操作类之间的关系。

例如:MiVan继承Car类

Class MiVan:Car

{

}

MiVan可以调用父类的公共属性,继承保护了封装,无法访问私有成员。

.NET不允许多重继承

可以将类、结构或接口的定义拆分到两个或多个源文件中,在类声明前添加partial关键字即可。

Sealed关键字

防止发生继承

创建子类对象访问基类功能,并扩展。

Base关键字

静态成员只能由类来访问,不能由对象来访问。

Base和this都是访问类的实例

一般基类的默认构造函数会被自动调用

上述例子,显示调用合适的自定义基类构造函数。解决只读问题和低效性。增加了自定义的构造函数,就把默认的构造函数自动移除了,所以得重新定义默认构造函数。

基类加Protected关键字

好处:派生类就可以直接访问基类的信息。

坏处:有可能绕过公共属性设置的业务规则。

受保护的数据被认为是私有的。

包含/委托编程

Has-a关系

简单的说,委托就是增加公共成员到包含类,以便使用被包含对象的功能。

非嵌套类不能使用private关键字声明。

Public class OuterClass

{

//公共嵌套类型可以被任何人使用

Public class PublicInnerClass()

//私有嵌套类型只可以被包含类的成员使用

Private class PrivateInnerClass()

}

C#多态

相同的请求做出不同的响应。

如果基类希望定义由子类重写的方法,必须加上virtual关键字。

如果子类希望改变虚方法的实现细节,必须使用override关键字。

可以通过base关键来使用默认行为

例如:

Base.GiveBonus();

使用了基类的默认行为。

抽象类

防止创建模糊的基类,使用abstract关键字。

Abstract class Employee

{

}

构建多态接口

抽象方法只可以在抽象类中

dynamic 类似于javascript中的Var 弱类型(与底层打交道会用的到)

OOP三大核心封装继承多态的更多相关文章

  1. Java三大特性(封装,继承,多态)

    Java中有三大特性,分别是封装继承多态,其理念十分抽象,并且是层层深入式的. 一.封装 概念:封装,即隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别:将抽象得到的数据 ...

  2. C++三大特性 封装 继承 多态

    C++ 三大特性 封装,继承,多态 封装 定义:封装就是将抽象得到的数据和行为相结合,形成一个有机的整体,也就是将数据与操作数据的源代码进行有机的结合,形成类,其中数据和函数都是类的成员,目的在于将对 ...

  3. JAVA的三大特征 封装继承多态- 简单总结

    简单总结一下 封装-即从很多类的抽取相同的代码 写在一个类里. 好处是 代码的重用,安全. 继承-减少代码的书写. 其好处也是 代码的重用. 多态- 把不同的子类对象都当作父类来看,可以屏蔽不同子类对 ...

  4. 深入理解Java面向对象三大特性 封装 继承 多态

    1.封装 封装的定义: 首先是抽象,把事物抽象成一个类,其次才是封装,将事物拥有的属性和动作隐藏起来,只保留特定的方法与外界联系 为什么需要封装: 封装符合面向对象设计原则的第一条:单一性原则,一个类 ...

  5. Python 入门 之 面向对象的三大特性(封装 / 继承 / 多态)

    Python 入门 之 面向对象的三大特性(封装 / 继承 / 多态) 1.面向对象的三大特性: (1)继承 ​ 继承是一种创建新类的方式,在Python中,新建的类可以继承一个或多个父类,父类又可以 ...

  6. 浅谈学习C++时用到的【封装继承多态】三个概念

    封装继承多态这三个概念不是C++特有的,而是所有OOP具有的特性. 由于C++语言支持这三个特性,所以学习C++时不可避免的要理解这些概念. 而在大部分C++教材中这些概念是作为铺垫,接下来就花大部分 ...

  7. php面向对象 封装继承多态 接口、重载、抽象类、最终类总结

    1.面向对象 封装继承多态  接口.重载.抽象类.最终类 面向对象 封装继承多态  首先,在解释面向对象之前先解释下什么是面向对象? [面向对象]1.什么是类? 具有相同属性(特征)和方法(行为)的一 ...

  8. java面向对象(封装-继承-多态)

    框架图 理解面向对象 面向对象是相对面向过程而言 面向对象和面向过程都是一种思想 面向过程强调的是功能行为 面向对象将功能封装进对象,强调具备了功能的对象. 面向对象是基于面向过程的. 面向对象的特点 ...

  9. Java的OOP三大特征之一——继承

    Java的OOP三大特征之一——继承 子类继承父类的特征和行为(属性和方法),使得子类具有父类的各种属性和方法.或子类从父类继承方法,使得子类具有父类相同的行为. 特点:在继承关系中,父类更通用.子类 ...

随机推荐

  1. 巧用JavaScript语言特性解耦页面间调用

    一个很小的技巧,留下一笔,供日后查看. 业务场景: 一个页面A,打开一个新窗口页面B,执行业务操作,B执行完后,回调A页面方法,并关闭自身. 最原始方法: 最直接的方法莫过于在B页面直接调用A页面的某 ...

  2. Nginx搭建动态静态服务器

    Nginx做静态资源服务器优于Tomcat 区分静态资源,动态资源请求 使用域名区分! 如果是动态资源请求  反向代理到 Tomcat 如果 是静态资源请求  直接走本地Nginx 配置: ###静态 ...

  3. python安装mongodb

    提前把mongodb-linux-x86_64-rhel70-3.2.4.tgz放到和脚本相同目录下,然后把下复制到脚本里面,开始执行 #!/usr/bin/python #-*- codinig: ...

  4. IK分词器的安装与使用IK分词器创建索引

    之前我们创建索引,查询数据,都是使用的默认的分词器,分词效果不太理想,会把text的字段分成一个一个汉字,然后搜索的时候也会把搜索的句子进行分词,所以这里就需要更加智能的分词器IK分词器了. 1. i ...

  5. LeetCode.914-一副牌中的X(X of a Kind in a Deck of Cards)

    这是悦乐书的第352次更新,第377篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第214题(顺位题号是914).在一副牌中,每张牌上都写有一个整数. 当且仅当您可以选择 ...

  6. [BeiJingWc2008]Gate Of Babylon

    <基尔伽美修>是人类历史上第一部英雄史诗,两河流域最杰出的文学作品之一.作品讲述了基尔伽美修一生的传奇故事.在动画Fate/staynight中,基尔伽美修与亚瑟王等传说中的英雄人物一起出 ...

  7. 常用DOS命令及编程软件fa

    1.常用的dos命令(应用) 在接触集成开发环境之前,我们需要使用命令行窗口对Java程序进行编译和运行,所以需要知道dos命令. 打开命令行窗口的方式:win + r打开运行窗口对java程序进行编 ...

  8. Spring Cloud Zuul Filter 和熔断

    转一篇很不错的关于Spring Cloud Zuul 相关用法的文章,基本包含常用的一些场景,另外附上实际项目中的熔断.打印请求日志和登录验证的实例. 原文地址:https://www.cnblogs ...

  9. idea工具

    1. 使用IntelliJ IDEA 配置JDK(入门)   https://blog.csdn.net/nobb111/article/details/77116259 2. idea 调试快捷键  ...

  10. NEO4J亿级数据导入导出以及数据更新

    1.添加配置 apoc.export.file.enabled=true apoc.import.file.enabled=true dbms.directories.import=import db ...