c#重点[封装,继承,多肽]
面向对象的语言三大特点:封装、继承、多态
Ⅰ.封装:是把类的内部隐藏起来,以防止外部世界看见的一个面向对象的概念,通过关键字去控制变量,方法的访问权限。
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#重点[封装,继承,多肽]的更多相关文章
- day33 序列类型,绑定方法,类方法,静态方法,封装继承和多态
Python之路,Day20 = 序列类型,绑定方法,类方法,静态方法,封装继承和多态 序列是指有序的队列,重点在"有序". 一.Python中序列的分类 Python中的序列主要 ...
- java面向对象(封装-继承-多态)
框架图 理解面向对象 面向对象是相对面向过程而言 面向对象和面向过程都是一种思想 面向过程强调的是功能行为 面向对象将功能封装进对象,强调具备了功能的对象. 面向对象是基于面向过程的. 面向对象的特点 ...
- objective-c自学总结(三)---面向对象的封装,继承与多态
面向对象的三大特性 封装 继承 多态 1.封装: 隐藏属性,方法或实现细节的过程称为封装 信息隐藏,隐藏对象的实现细节,不允许用户看到 将东西包装在一 然后以新的完整形式呈现出来 例如,两种或多种化学 ...
- 浅谈学习C++时用到的【封装继承多态】三个概念
封装继承多态这三个概念不是C++特有的,而是所有OOP具有的特性. 由于C++语言支持这三个特性,所以学习C++时不可避免的要理解这些概念. 而在大部分C++教材中这些概念是作为铺垫,接下来就花大部分 ...
- Java三大特性(封装,继承,多态)
Java中有三大特性,分别是封装继承多态,其理念十分抽象,并且是层层深入式的. 一.封装 概念:封装,即隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别:将抽象得到的数据 ...
- php面向对象 封装继承多态 接口、重载、抽象类、最终类总结
1.面向对象 封装继承多态 接口.重载.抽象类.最终类 面向对象 封装继承多态 首先,在解释面向对象之前先解释下什么是面向对象? [面向对象]1.什么是类? 具有相同属性(特征)和方法(行为)的一 ...
- PHP面向对象 实例化 构造函数 封装 继承 静态
PHP面向对象 实例化 构造函数 封装 继承 静态 面向对象: 一:定义类 class Dog { var $name; var $age; var $pinzhong; function Jiao( ...
- Java基础——面向对象(封装——继承——多态 )
对象 对象: 是类的实例(实现世界中 真 实存在的一切事物 可以称为对象) 类: 类是对象的抽象描述 步骤: 1.定义一个类 (用于 描述人:) ( * 人:有特征和行为) 2.根据类 创建对象 -- ...
- Python 入门 之 面向对象的三大特性(封装 / 继承 / 多态)
Python 入门 之 面向对象的三大特性(封装 / 继承 / 多态) 1.面向对象的三大特性: (1)继承 继承是一种创建新类的方式,在Python中,新建的类可以继承一个或多个父类,父类又可以 ...
- OOP三大核心封装继承多态
OOP支柱 3 个核心:封装 继承 多态 封装就是将实现细节隐藏起来,也起到了数据保护的作用. 继承就是基于已有类来创建新类可以继承基类的核心功能. 在继承中 另外一种代码重用是:包含/委托,这种重用 ...
随机推荐
- 关于node.js的误会
昨天写了篇博客,介绍了一下我对node.js的第一次亲密接触后的感受,以为node.js很小众,出乎我意料很多人感兴趣,并且对博客中的细节问题做了评论,最多的是围绕node.js的异步与单线程展开的, ...
- C#学习笔记 -- Attribute
学习参考: http://www.cnblogs.com/dudu/articles/4449.html http://www.cnblogs.com/anytao/archive/2007/04/1 ...
- [翻译]AKKA笔记 - LOGGING与测试ACTORS -2 (二)
3.THROW IN A LOGBACK.XML 现在我们把SLF4J日志配置在logback. <?xml version="1.0" encoding="UTF ...
- 230行实现一个简单的MVVM
作者:mirone链接:https://zhuanlan.zhihu.com/p/24451202来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. MVVM这两年在前端届 ...
- EF架构~有时使用SQL更方便
回到目录 在进行统计时,尤其是按月进行统计,由于我们采用的时间是一个2015-12-12日这种,所以在linq你无法进行拆分,你拆分了在发到SQL时也会报错,因为SQL那边更新不需要你.net的方法, ...
- paip.python错误解决24
paip.python错误解决 作者Attilax 艾龙, EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http://blog.csdn.net/attilax ...
- java的五种数据类型解析
不知道大家对java的简单数据类型是否了解,下面针对Java的五种类型简单数据类型表示数字和字符,进行详细的讲解和分析. 一.简单数据类型初始化 在Java语言中,简单数据类型作为类的成员变量声明时自 ...
- react2 react 遍历数组
<body><!-- React 真实 DOM 将会插入到这里 --><div id="example"></div> <!- ...
- 【原创】NIO框架入门(二):服务端基于MINA2的UDP双向通信Demo演示
前言 NIO框架的流行,使得开发大并发.高性能的互联网服务端成为可能.这其中最流行的无非就是MINA和Netty了,MINA目前的主要版本是MINA2.而Netty的主要版本是Netty3和Netty ...
- Java基础-继承-编写一个Java应用程序,设计一个汽车类Vehicle,包含的属性有车轮个数 wheels和车重weight。小车类Car是Vehicle的子类,其中包含的属性有载人数 loader。卡车类Truck是Car类的子类,其中包含的属性有载重量payload。每个 类都有构造方法和输出相关数据的方法。最后,写一个测试类来测试这些类的功 能。
#29.编写一个Java应用程序,设计一个汽车类Vehicle,包含的属性有车轮个数 wheels和车重weight.小车类Car是Vehicle的子类,其中包含的属性有载人数 loader.卡车类T ...