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

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

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. 关于node.js的误会

    昨天写了篇博客,介绍了一下我对node.js的第一次亲密接触后的感受,以为node.js很小众,出乎我意料很多人感兴趣,并且对博客中的细节问题做了评论,最多的是围绕node.js的异步与单线程展开的, ...

  2. C#学习笔记 -- Attribute

    学习参考: http://www.cnblogs.com/dudu/articles/4449.html http://www.cnblogs.com/anytao/archive/2007/04/1 ...

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

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

  4. 230行实现一个简单的MVVM

    作者:mirone链接:https://zhuanlan.zhihu.com/p/24451202来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. MVVM这两年在前端届 ...

  5. EF架构~有时使用SQL更方便

    回到目录 在进行统计时,尤其是按月进行统计,由于我们采用的时间是一个2015-12-12日这种,所以在linq你无法进行拆分,你拆分了在发到SQL时也会报错,因为SQL那边更新不需要你.net的方法, ...

  6. paip.python错误解决24

    paip.python错误解决 作者Attilax 艾龙, EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http://blog.csdn.net/attilax ...

  7. java的五种数据类型解析

    不知道大家对java的简单数据类型是否了解,下面针对Java的五种类型简单数据类型表示数字和字符,进行详细的讲解和分析. 一.简单数据类型初始化 在Java语言中,简单数据类型作为类的成员变量声明时自 ...

  8. react2 react 遍历数组

    <body><!-- React 真实 DOM 将会插入到这里 --><div id="example"></div> <!- ...

  9. 【原创】NIO框架入门(二):服务端基于MINA2的UDP双向通信Demo演示

    前言 NIO框架的流行,使得开发大并发.高性能的互联网服务端成为可能.这其中最流行的无非就是MINA和Netty了,MINA目前的主要版本是MINA2.而Netty的主要版本是Netty3和Netty ...

  10. Java基础-继承-编写一个Java应用程序,设计一个汽车类Vehicle,包含的属性有车轮个数 wheels和车重weight。小车类Car是Vehicle的子类,其中包含的属性有载人数 loader。卡车类Truck是Car类的子类,其中包含的属性有载重量payload。每个 类都有构造方法和输出相关数据的方法。最后,写一个测试类来测试这些类的功 能。

    #29.编写一个Java应用程序,设计一个汽车类Vehicle,包含的属性有车轮个数 wheels和车重weight.小车类Car是Vehicle的子类,其中包含的属性有载人数 loader.卡车类T ...