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 个核心:封装 继承 多态 封装就是将实现细节隐藏起来,也起到了数据保护的作用. 继承就是基于已有类来创建新类可以继承基类的核心功能. 在继承中 另外一种代码重用是:包含/委托,这种重用 ...
随机推荐
- 《30天自制操作系统》笔记(06)——CPU的32位模式
<30天自制操作系统>笔记(06)——CPU的32位模式 进度回顾 上一篇中实现了启用鼠标.键盘的功能.屏幕上会显示出用户按键.点击鼠标的情况.这是通过设置硬件的中断函数实现的,可以说硬件 ...
- node.js module初步理解
在开发一个复杂的应用程序的时候,我们需要把各个功能拆分.封装到不同的文件,在需要的时候引用该文件.没人会写一个几万行代码的文件,这样在可读性.复用性和维护性上都很差,几乎所有的编程语言都有自己的模块组 ...
- Javascript函数节流
最近在做网页的时候有个需求,就是浏览器窗口改变的时候需要改一些页面元素大小,于是乎很自然的想到了window的resize事件,于是乎我是这么写的 <!DOCTYPE html> < ...
- Linux C/C++的编译
以前在Linux上面编译过C,但是没有编译过C++,今天用到了,就稍微学习了一下. 简单的介绍 linux 中最重要的编译工具是 GCC.GCC 是 GNU 的 C 和 C++ 编译器.实际上,GCC ...
- .NET面试基础知识
1. 什么是Asp.Net? 答:Asp.Net是一种基于.NET平台下的动态web开发技术,它使用的是codebehind(代码后置技术),可以将前台呈现和后台代码进行有效的分离. 2. ...
- PowerDesigner实用操作
1. 让PhysicalDiagram里的表显示字段名Tools→Display Preferences→在General Settings里选择Table→点击Advanced→选择Form下的Co ...
- 大叔也说Xamarin~Android篇~监听返回键,单击返回某个webView,双击退出
回到目录 这个操作在原生android里是很容易实现的,在xamarin里也不难,在activity里有方法OnKeyDown,我们只需要重写一下就可以了,然后通过webView重新加载到要返回的页面 ...
- Redis的介绍及使用实例.
本文就来讲一下Redis安装的方法和Redis生成主键的优点以及和其他几种方式生成主键的对比. 1,Redis安装首先将Redis的tar包拷贝到Linux下的根目录 然后解压到redis文件夹下:( ...
- Atitit apache 和guava的反射工具
Atitit apache 和guava的反射工具 apache1 Spring的反射工具类 ReflectionUtils1 Guava 反射工具2 apache 34 7 ...
- 动手搭个wordpress
看到很多人都是自己搭建博客服务器,然后一切都在自己的掌控之下,这样就不存在什么迁移,数据安全之类的问题,当然需要自己搞个空间了,不过现在都便宜的不行,$15/year,也是醉了.我不怎么写博客,但是个 ...