面向对象的语言三大特点:封装、继承、多态

Ⅰ.封装:是把类的内部隐藏起来,以防止外部世界看见的一个面向对象的概念,通过关键字去控制变量,方法的访问权限。

1).访问修饰符:

Ⅱ.继承:

eg:我们建一个Person作为父类,Chinese作为子类

 class Person
{
public string name="zhangsan";
public int age=;
//类里面有一个默认的构造方法,我们在下面写了一个构造方法,如果想去调用这个无参数的构造方法,那就要加一个无参构造方法
public Person()
{
Console.WriteLine("我是一个人类");
}
public void SayHi()
{
Console.WriteLine("hello,我是人类!");
}
}

Person

  class Chinese:Person
{ }

Chinese

我们在程序入口里面调用父类里面的成员:

class Program
{
static void Main(string[] args)
{
Chinese c = new Chinese();
Console.WriteLine(c.name);
Console.WriteLine(c.age);
c.SayHi();
}
}

Program

得到结果为:

1.为什么子类里面没有成员,还能调用?

如果,我把person里面的 [public string name="zhangsan";]变为私有成员[private string name;],调用结果显示?

以上的得出结论:

继承:

1.单继承,一个类只能继承一个类[一个儿子只有一个爹]
  2.Chinese:Person Chinese 子类/派生类 Person 父类/基类/超类
  3.Chinese:Person 那么Chinese继承了Person里面所有的成员(字段、方法),对于父类的私有成员,子类还是能继承到,只是没有访问权限

 2).所有的类型的基类是System.Object类

 3) . 构造函数不能被继承

4).子类Chinese里面添加一个方法

     class Chinese:Person
{
public Chinese()
{
Console.WriteLine("我是中国人!");
}
}

Chinese

我们调用program看一下结果:

 class Program
{
static void Main(string[] args)
{
Chinese c = new Chinese();
c.SayHi();
}
}

Program

结果显示:

4.当实例化子类对象时,首先调用父类的构造方法,然后调用子类的构造方法。

5).人类属于动物类animal,我们创建一个animal类让rerson类继承。chinese继承person,person继承animal

class Animal
{
public Animal()
{
Console.WriteLine("我是动物类!");
}
}

Animal

 class Person:Animal
{
public Person()
{
Console.WriteLine("我是人类");
}
public void SayHi()
{
Console.WriteLine("hello,我是人类!");
}

Person:Anima

    class Chinese:Person
{
public Chinese()
{
Console.WriteLine("我是中国人!");
}
}

Chinese:Person

结果显示:

5.如果A:B,B:C,那么A:C;

6).父类Person里面有一个SayHi()方法,如果在子类里面添加一个sayHi方法

class Chinese:Person
{
public Chinese()
{
Console.WriteLine("我是中国人!");
}
public void SayHi()
{
Console.WriteLine("你好,我是中国人");
}
}

Chinese里添加一个SayHi方法

结果显示:

我们来谈一下过程:

ⅰ.继承过来之后被隐藏,有意隐藏加一个关键字"new",如果加了关键字"new",就告诉子类,父类里面的sayHi只能被隐藏,不能被覆写

ⅱ.继承过来之后被覆写/重写,覆写需要在父类里面加"virtual",加了"virtual"之后就告诉子类继承之后,子类只能覆写"override"

  

结果还是一样,结论显示:

6.一个子类和父类有相同的方法时,当运用子类的对象去调用该方法时,调用子类的方法,默认情况下,从父类的方法被隐藏掉,(有意隐藏,需要在子类的方法上加上New(可以加也可以不加))

如果想覆写/重写父类的方法,需要在父类里面设置该方法为虚方法(virtual),然后子类通过override关键字去覆写。

7).里氏替换原则:一个父类的变量可以接收子类的对象,反之不行。

class Person:Animal
{
public Person()
{
Console.WriteLine("我是人类");
}
public void SayHi()
{
Console.WriteLine("hello,我是人类!");
}
}

Person

class Chinese:Person
{
public Chinese()
{
Console.WriteLine("我是中国人!");
}
public void SayHi()
{
Console.WriteLine("你好,我是中国人");
}
}

Chinese:Person

 class Program
{
static void Main(string[] args)
{
//父类的变量可以接收到子类的任何类型
//如果没有覆写的话,就近原则,p离person近,就调用person的sayHi方法
Person p = new Chinese();
p.SayHi();
Console.ReadKey();
}
}

Program

结果:

覆写之后:

class Person:Animal
{
public Person()
{
Console.WriteLine("我是人类");
}
public virtual void SayHi()
{
Console.WriteLine("hello,我是人类!");
}
}

Person

class Chinese:Person
{
public Chinese()
{
Console.WriteLine("我是中国人!");
}
public override void SayHi()
{
Console.WriteLine("你好,我是中国人");
}
}

Chinese

结果:

得出:

7.子类和父类有相同的方法,默认情况下(没有被覆写),该变量调用该方法时,调用的是父类的方法(就近原则);

当子类覆写该方法时,变量调用的是子类的方法。

8) .密封类 sealed class,不能被继承的类

   

9).继承的好处?

假设工厂要生产三孔的插座,它首先会把模型设计出来,模型里面只是定义了方法,模型没有写方法的具体内容,把公共的方法抽象出来,做程序的时候先写了一个接口,

让下面的类继承这个接口,这个接口并不实现具体的内容,只是定义方法名,返回的类型,具体实现什么效果是在子类里面override,所以继承的好处就是把公共的东西抽象出       来,减少了代码的重复性。

Ⅲ.多态 方法名相同,方法具体实现内容不同

1. 多态分为重载(overload)和覆写(override)

重载:方法名相同,方法里面的参数不同,参数的种类,个数或者顺序不同。

2. 只有父类的虚方法(virtual)才能被子类覆写,子类实现覆写用关键字override,如果不加override就隐藏了父类的方法(需要加上关键字new,eg: public new static void Chinese())

3. 静态方法不能被覆写,但可以被隐藏

4. 静态类里面只能有静态成员

5. 静态的成员不能带override ,virtual ,abstract

c#重点[封装,继承,多肽]的更多相关文章

  1. day33 序列类型,绑定方法,类方法,静态方法,封装继承和多态

    Python之路,Day20 = 序列类型,绑定方法,类方法,静态方法,封装继承和多态 序列是指有序的队列,重点在"有序". 一.Python中序列的分类 Python中的序列主要 ...

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

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

  3. objective-c自学总结(三)---面向对象的封装,继承与多态

    面向对象的三大特性 封装 继承 多态 1.封装: 隐藏属性,方法或实现细节的过程称为封装 信息隐藏,隐藏对象的实现细节,不允许用户看到 将东西包装在一 然后以新的完整形式呈现出来 例如,两种或多种化学 ...

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

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

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

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

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

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

  7. PHP面向对象 实例化 构造函数 封装 继承 静态

    PHP面向对象 实例化 构造函数 封装 继承 静态 面向对象: 一:定义类 class Dog { var $name; var $age; var $pinzhong; function Jiao( ...

  8. Java基础——面向对象(封装——继承——多态 )

    对象 对象: 是类的实例(实现世界中 真 实存在的一切事物 可以称为对象) 类: 类是对象的抽象描述 步骤: 1.定义一个类 (用于 描述人:) ( * 人:有特征和行为) 2.根据类 创建对象 -- ...

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

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

  10. OOP三大核心封装继承多态

    OOP支柱 3 个核心:封装 继承 多态 封装就是将实现细节隐藏起来,也起到了数据保护的作用. 继承就是基于已有类来创建新类可以继承基类的核心功能. 在继承中 另外一种代码重用是:包含/委托,这种重用 ...

随机推荐

  1. C#基础入门一

    .net(软件开发平台)-------------------------------------------------------- 学习内容:.net平台下的开发语言. .net freamwo ...

  2. C/C++ char* arr与char arr[]的区别(反汇编解析)

    写作日期:2016.08.31 修改日期:2016.09.01 .2016.09.02. 交流qq:992591601 用了几天时间复习了下C语言.对于C语言的字符串操作有些不习惯,于是作为练习,写下 ...

  3. [翻译]AKKA笔记 - LOGGING与测试ACTORS -2 (二)

    3.THROW IN A LOGBACK.XML 现在我们把SLF4J日志配置在logback. <?xml version="1.0" encoding="UTF ...

  4. NodeJS系列~第一个小例子,实现了request.querystring功能

    返回目录 百度百科上: Node.js是一套用来编写高性能网络服务器的JavaScript工具包,一系列的变化由此开始,在Node中,Http是首要的.Node为创建http服务器作了优化,所以在网上 ...

  5. MVVM架构~knockoutjs系列之扩展ajax验证~验证输入数据是否与后台数据相等

    返回目录 在看这篇文章之前,你有必要先看我之前的文章,之前文章是将一个方法以参数的形式传给KO,然后返回一个真假值,去做验证,这类似于面向对象语言里的委托,在JS里我们叫它回调方法,本篇文章与前一文章 ...

  6. Atitit RSA非对称加密原理与解决方案

    Atitit RSA非对称加密原理与解决方案 1.1. 一.一点历史 1 1.2. 八.加密和解密 2 1.3. 二.基于RSA的消息传递机制  3 1.4. 基于rsa的授权验证机器码 4 1.5. ...

  7. Android 在线SDK更新 和谐被墙解决

    Failed to fetch URL https://dl-ssl.google.com/android/repository/addons_list-2.xml, reason: Connect ...

  8. SQLServer性能分析

    SQLServer性能分析 当数据库出现性能问题,应用出现运行缓慢的时候,下面这个东东能让你如获至宝 create table #sp_who2 ( SPID int ,status varchar( ...

  9. Jasmine入门(结合示例讲解)

    参考: http://www.cnblogs.com/wushangjue/p/4541209.html http://keenwon.com/1191.html http://jasmine.git ...

  10. java基础-继承:矩形体积类问题

    28.按要求编写一个Java应用程序: (1)定义一个类,描述一个矩形,包含有长.宽两种属性,和计算面积方法. (2)编写一个类,继承自矩形类,同时该类描述长方体,具有长.宽.高属性, 和计算体积的方 ...