面向对象-三大特性

面向对象三大特性

一、封装

1、什么是封装

封装是把一个或多个项目封闭在一个物理的或者逻辑的包中。在面向对象程序设计方法论中,封装是为了防止对实现细节的访问。其实是对某个实现方法的封装。

2、封装的意义

1、隔离性,安全性。更改内部实现细节时不会影响到外部对象的访问原则。

2、低耦合(面向对象编程我们一般提倡高内聚、低耦合),实现页面和逻辑分离。

3、可读性(我们可以通过方法名直接了解这个方法的作用,不必在了解方法的实现)

4、可扩展(定义不同的规则选择不同 的实现,减少代码耦合度)

3、访问修饰符

public:所有对象都可访问

private:只能对象本身的对象内部调用

interval:同一个程序集的对象内部进行访问

protected:这类对象的子类对象可以访问

protected internal: 当前程序集或派生自包含类的类型。

4、默认访问修饰符

在命名空间内部或编译单元顶部的所有类型(class、struct、abstract class、interface、delegate、enum),默认是internal,可以改为public

类中所有的成员,默认均为private

抽象类的所有成员,默认均为private类型,但抽象方法不能用private修饰

接口的所有成员,默认均为public类型,而且不能手动添加访问修饰符

结构的所有成员,默认均为private类型,而且只能是public、internal、private这三种类型

命名空间,枚举类型成员默认public,也不可能是其他访问修饰符

委托,默认internal

二、继承

1、什么是继承?

当一个类A能够获取另一个类B中所有非私有的数据和操作的定义作为自己的部分或全部成分时,就称这两个类之间具有继承关系。被继承的类B称为父类或基类,继承了父类的类A称为子类或派生类。总的来说两个不同的类,具有相同的属性时可以将相同的属性 剥离出来 作为基类,分别继承基类。(C# 不能多继承)

2、继承的意义

1)、减少代码冗余

2)、高可用性

3)、减少代码量、提高可读性

4)、可以通过子类来实现对父类的重写(为多态提供前提)

3、缺点:

1)、继承会破坏包装、父类实现细节给子类,增加了两个类中的耦合性。

2)、在继承机构中如果成员不被使用、分配给他们的空间不被利用,则会增加程序性能。

4、继承的特性:

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

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

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

 override与overload

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

2、重载:(overload)方法名相同,形参个数 类型 顺序 不同

三、多态

1、什么是多态?

就是在继承的基础上,子类继承并去重写其父类的方法来实现不同的执行过程。

同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。

在 C#语言中体现多态有三种方式:虚方法,抽象类, 接口

多态的意义

优点:

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

2、简化代码(如果函数/方法参数中使用的是父类的类型,可以传入父类、子类的对象)

局限性:

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

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

重载:

面向对象-三大特性(封装,继承,多态)

重载方法

 

重写overread

父类视图

面向对象-三大特性(封装,继承,多态)

父类类视图

子类视图

 

面向对象-三大特性(封装,继承,多态)

子类视图

执行方法:

面向对象-三大特性(封装,继承,多态)

执行方法

 

重写(new)

父类视图

面向对象-三大特性(封装,继承,多态)

父类类视图

子类视图

 

面向对象-三大特性(封装,继承,多态)

子类视图

执行方法:

 

面向对象-三大特性(封装,继承,多态)

执行方法

可以看出,当派生类Dog的Eat()方法使用new修饰时,Dog的对象转换为Animal对象后,调用的是Animal类中的Eat()方法。其实可以理解为,使用new关键字后,使得Dog中的Eat()方法和Animal中的Eat()方法成为毫不相关的两个方法,只是它们的名字碰巧相同而已。所以, Animal类中的Eat()方法不管用还是不用virtual修饰,也不管访问权限如何,或者是没有,都不会对Dog的Eat()方法产生什么影响

严格的说,不能说通过使用new来实现多态,只能说在某些特定的时候碰巧实现了多态的效果。

posted @   帅呆了的帅哥哥  阅读(287)  评论(0编辑  收藏  举报
编辑推荐:
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
阅读排行:
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 上周热点回顾(2.17-2.23)
点击右上角即可分享
微信分享提示