• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C# 面向对象的三大特性

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

一、封装: 我们可以把世界上任何一个东西都看作为一个对象,那么我们这里以人为例,一个人就肯定是一个对象了。 那么封装是什么呢? 封装就是这个人要完成一件事情,他所需要的任何工具都带在了自己的身上,所需要的技术也都装在了自己的脑子里了。不需要借助于别人的力量就能完成这一件事情。这个有什么好处呢?好处就是如果我要吩咐这个人去完成一件事情,我不需要知道他是怎么完成的,也不需要协助他去完成,只要知道结果,他完成了就OK了。至于他是先干什么后干什么我不干涉,这有助于他更快更好的干好这件事情,我自己也省事。

1、访问权限(可见性)

Public:(随处可见)所有包、类导入后均可见  公共的

Protected:(合法继承)本身、不同包的子类自身,

Private:(自私自利)只在本类中可见

本类

同包类

public

protected

default

private

不同包类

public

protected

default

 

子类

子类

public

Protected(子类中,且子类自身使用)

 

 

其他类

public

 

 

 

 

2、

(1)、属性-->private(私有属性,公开方法,不用默认)

(2)、方法--> public    protected  

书面的解释如下: 每个对象都包含它能进行操作所需要的所有信息,因此对象不必依赖其它的对象来完成自己的操作。

二、继承: 还以为人为例,我们每个人都会有一些共同的特征,都要做一些相同的事情。比如:人都有一个脑袋,二只胳膊,二条脚,这是共同的特征。都要吃饭,喝水,这是都要做的相同的事情。那么如果我们现在要声明很多个人,每个人都会有这些特征,那我不是要写很多重复的代码?所以我们可以先建一个人的父类,这个父类不代表一个具体的人,只是一个拥有人所有共同特性的虚拟的人。下次我 们要实例化一个具体的人的时候,只需要将这个人继承上面这个“虚拟的人”,那么他就拥有了人的所有共同特性。这样,这些重复的代码我们就可以不写了。

当然,继承的目标不仅仅是为了节省代码,还有实现后面的多态的功能。初学者只需要了解继承可以少写很多代码就好了,余下的需要在项目中慢慢理解。

书面的解释如下: 对象的继承代表一种"is-a"的关系,假如两个对象A和B,如果可以描述为"B就是A",那么则表示B可以继承自A。

注意: 如果A继承了B,那么A不仅拥有了B除私有的特性外的所有特性,A还可以拥有自己独特的特性。比如上面人的这个例子,一个继承了 “虚拟的人”,那么他除了有一个脑袋,二只胳膊,二条脚,要吃饭喝水外,他可能还会编程。编程就是他独特的特性了,因为不是每个人都会编程的。

1、

(1)、延续:父类存在,子类没有重写但可以使用;

(2)、新增:父类没有,子类新增加的

(3)、重写:父类子类都存在,但是弗雷德不满足要,子类对其进行从新定义;

2、 实例化:

      (1)、先父类后子类,先静态后成员;

           实例化的时候先调用父类的静态构造快,在调用父类的构造方法,然后子类的构造块,在调用子类的构造方法;

(2)、默认调用父类空构造;

3、重写  override

      (1)、重写与重载:

           重写:继承的子类中,方法签名相同( 方法名+形参个数 类型 顺序  )

           重载:同一个类 方法名相同 ,形参个数 类型 顺序 不同

      (2)、重写规则:在子类中签名与父类中相同,在合理范围内提高子类可见性;

         A、返回类型:基本类型和void必须相同;引用类型要<=父类的返回类

         B、异常:

         C、可见性:要大于或等于父类中被重写的方法

三、多态: 有多态之前必须要有继承,只有多个类同时继承了同一个类,才有多态这样的说法。

还是以人为例子,前面我们有说过人都要做“吃饭”这样一个相同的事情。“吃饭”这个事情,体现到类中就是方法了。因为是人都是要做的,所以我们在“虚拟的人”中写好了这个方法,但每个人都有不同的吃饭方法,有用筷的也有用叉的,有要吃米饭的也有要吃面食的。所以如果我们要描述不同人的吃饭的过程,就要把这个过程放到具体的子类中去了,因为每个人都不一样嘛。同样一个方法,子类都有不同的实现方式,这个就是多态了,多态有助于程序的灵活性。

注意:子类中如果重写了父类的方法(多态),那么父类中的这个方法将不会再调用。

1.好处:

简化了编程接口。它容许在类和类之间重用一些习惯性的命名,而不用 为每一个新加的函数命名一个新名字。

简化代码

如果函数/方法参数中使用的是父类的类型,可以传入父类、子类的对象

局限性:父类类型的变量,不能直接调用子类特有的方法。必须强转为子类类型的变量,才能直接调用子类特有的方法

2、编译时多态:其实就是重载,是对非虚成员来说的,系统在编译时,根据不同签名来决定实现何种操作。

3、运行时多态:也就是重写,是通过虚成员实现的,指直到系统运行时,才根据实际情况决定实现何种操作。

对与第一种情况很容易就能理解,不同签名就有不同的实现

而第二种情况是在继承的基础上实现的,子类继承基类时,通过对虚成员的重写,然后利用基类引用子类对象,那么不同的子类对象实现相应的不同操作。

这样的好处是显而易见的,利用基类类型定义一次,然后给它传入不同的子类对象,然后实现不同的操作,提高了效率。

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
【C#学习笔记】网页弹出提示框发布时间:2022-07-13
下一篇:
C#什么是转义字符!字符串前的@符号的作用!发布时间:2022-07-13
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap