面向对象对象三(四)大特征:封装,继承,多态,(抽象)

1_封装

(1)封装是指将数据(属性)和行为(方法)组合在一个类中,并对外部隐藏对象的内部实现细节

(2)封装的核心概念

  • 数据隐藏:将类内部数据设为私有,只通过公共方法访问

  • 实现隐藏:隐藏类的内部实现细节,只暴露必要的接口

  • 保护数据的完整性:通过方法控制对数据的访问和修改

(3)属性的封装:将字段设为私有的,利用属性控制字段的访问

(4)方法的封装:将方法写在类中,通过类的实例或者类名调用方法

(5)封装的好处:

  • 数据保护:防止外部代码直接修改对象内部的状态

  • 灵活性:可以修改内部实现而不影响使用该类的代码

  • 易于维护:将相关数据和操作组织在一起

  • 减少耦合:类之间通过明确定义的接口交互

  • 数据验证:可以在设置属性时添加验证逻辑

2_继承

(1)继承允许我们基于现有的类创建新的类,实现代码重用

(2)继承的特点:

  • 单继承:c#只支持单继承,一个类只能继承一个父类

  • 传递性:继承关系可以多层传递

  • 所有的类都继承自object:即使没有显示指定,所有的类都隐式继承自System.Object

(3)继承中的访问修饰符:

  • public:任何代码都可访问

  • protected:只有类内部和派生类可访问

  • private:只有类内部可访问(默认)

  • internal:同一程序集内可访问

  • protected internal:同一程序集或派生类可访问

(4)继承的基本语法:使用:

(5)子类的继承函数:当调用子类的构造函数(无参和有参)时,会先调用父类的无参构造,想调用父类的有参构造,需要子类的有参构造使用base(参数),调用父类的有参构造

3_多态

(1)多态:同一个行为具有不同的表现形式和能力

(2)多态的分类:

  • 编译时多态(静态多态):通过方法重载(Method Overloading)和运算符重载(Operator Overloading)来实现。

  • 运行时多态(动态多态):通过继承和接口,以及方法重写来实现

(3)静态多态在编译过程中,通过方法重载和运算符重载来实现,也成为静态绑定和早期绑定

动态多态在运行过程中,通过方法重写,隐藏方法来实现,也称之为动态绑定或者后期绑定

(4)方法重载:同一个函数名不同参数列表

(5)方法重写:

通过virtual和override关键字实现

public class Shape
{public virtual void Draw(){Console.WriteLine("绘制一个形状");}
}public class Circle : Shape
{public override void Draw(){Console.WriteLine("绘制一个圆形");}
}

通过new关键字实现

public class Shape
{public void Draw(){Console.WriteLine("绘制一个形状");}
}public class Circle : Shape
{public new void Draw(){Console.WriteLine("绘制一个圆形");}
}

4_接口

(1)接口:使用java,asp.net等编写的API接口。让其他人通过相应的请求协议(如:http/https)来访问。理解成“在接口服务器上定义多个方法,在客户端上调用这些方法,这样的一个过程,称为请求接口。

(2)C#中的接口:定义一套规则,其他类实现规则。规则===》锲约,合同。 接口必须实现,才能使用。接口也是多态性的表现。

5_类与方法

5.1 普通类:

(1)可以有实例成员,静态成员 实例字段 静态字段 实例方法 静态方法 实例事件 静态事件....不能由抽象方法

(2)访问普通类的成员的时候,要先确定是静态的还是非静态(实例的);静态 使用类名访问;非静态(实例的) 实例化对象访问

5.2 静态类

(1)普通类经过 stati 修饰之后 就会变成静态类

(2)静态类特点:

  • 静态类不能实例化,即不能new,访问静态类中的成员的时候,通过静态类本身

  • 静态类内部不能有非静态成员,只能由静态成员

  • 静态类不支持继承,不能继承其他类,也不能被其它类继承

  • 静态类中的构造函数必须是静态的,而且不能有访问修饰符

(3)静态类作用:封装工具类

5.3 抽象类

(1)抽象类和接口类似,都是为了制定一些规则,由子类去实现这些成员,而不是直接操作抽象类和接口

(2)能够被其他的类继承 也能继承其他的类 但是它里面的抽象方法不能实现

(3)不能实例 抽象类设计出来就是用来被继承的 和密封类是相对

(4)抽象类特点:

  • 抽象类使用abstract 修饰

  • 抽象类中可以实例成员,可以抽象成员 可以有静态成员 可以有虚方法

  • 抽象类不能实例化,抽象类定义了之后,一般不直接使用它,而是使用它的子类

  • 抽象类只有被继承,才有存在的意义

  • 继承抽象类的子类,必须实现抽象类中的抽象成员

5.4 密封类

(1)关键字 sealed,设计不让其他类继承,但可以继承其他类,密封类中能包含 实例方法 静态方法 不能包含抽象方法 虚方法 和密封方法

(2)特点

  • 不能被继承

  • 可以实例化

  • 可以有实例成员,静态成员,不能有抽象成员和虚成员

5.5 抽象方法,虚方法,密封方法

(1)抽象方法(abstruct):抽象方法 不能实现 必须等待子类继承后, 在子类中重写 override;先占个位置 不去实现 等待子类实现;"空壳"

(2)虚方法(virtual):和抽象方法类似 ;虚方法可以有方法体,而且在子类中 不强制重写;虚方法就是为了重写的 是虚拟的 先占位 业务逻辑也可以先写一点,将来在子类中重新实现业务逻辑;继承过来的虚方法 可以重写 也可以不重写

(3)密封方法(sealed override):sealed 修饰成密封方法,不想在后续的子类中重写;sealed 关键字应用在方法上的时候,必须和override 同时使用

必须是继承自父类的方法使用sealed override重写,并不希望后面的子类重写该方法

public sealed  override void SealedFn1(){base.SealedFn1();}
5.6 总结表格
特点\类型普通类静态类抽象类密封类
是否可以实例化
是否可以被继承
是否可以继承其他类
是否有普通成员
是否可以有静态成员
是否可以有抽象成员
是否可以有虚成员

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/93558.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/93558.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/93558.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

中国星网发展情况全面分析

中国星网作为我国卫星互联网领域的"国家队"先锋,自2021年4月成立以来已取得显著进展。截至2025年8月,中国星网主导的GW星座已累计发射73颗卫星,形成"四天两发"的高频发射节奏,标志着我国低轨卫星互联网建设进入加速期。在战略定位上,中国星网不仅承担…

C++ Qt 成员对象初始化与 TCP 长连接问题深度解析

文章目录C Qt 成员对象初始化与 TCP 长连接问题深度解析1. 栈对象、堆对象与类成员对象的区别1.1 栈对象(局部变量)1.2 堆对象(动态分配)1.3 类成员对象1.4 栈对象 vs 成员对象 vs 堆对象对比表2. 为什么初始化列表必须用2.1 构造…

深度学习周报(8.11~8.17)

目录 摘要 Abstract 1 CNN--卷积神经网络简介 2 CNN核心操作 2.1 卷积 2.2 池化 3 总结 摘要 本周主要学习了卷积神经网络(CNN)的相关知识,包括概念、基本架构与应用领域等知识,了解了CNN利用其结构高效地从图像等网格化数…

oracle dg duplicate限速

一些客户在搭建dg的时候需要进行限速&#xff0c;不然对生产库的影响比较大&#xff0c;例如将速度限制到200M每秒&#xff0c;语法如下&#xff1a;rman target sys/XXXX auxiliary sys/XXXXdg <<EOF run{ allocate channel d1 type disk rate 200M; allocate auxiliar…

飞算JavaAI智慧校园场景实践:从校园管理到师生服务的全链路技术革新

目录一、智慧校园核心场景的技术突破1.1 智能校园综合管理系统1.2 智慧教学资源共享系统1.3 校园生活服务集成系统二、智慧校园系统效能升级实践结语&#xff1a;重新定义智慧校园技术边界在校园管理领域&#xff0c;“规模化运营”与“个性化服务”的矛盾、“管理效率”与“服…

PTPX分析中,如何处理fsdb文件过大的问题?

PTPX分析中&#xff0c;如何处理fsdb文件过大的问题&#xff1f;摘要&#xff1a;下面将基于Synopsys工具链&#xff08;PrimeTime PX&#xff0c;即PTPX&#xff0c;用于功耗分析&#xff1b;Verdi&#xff0c;用于波形查看&#xff09;逐一解答每个部分。这些工具在SoC功耗验…

004.Redis 数据持久化概述及实战

文章目录Redis持久化说明Redis持久化RDB持久化AOF持久化混合持久化save与bgsaveRedis RDB持久化Redis 安装Redis RDB配置手动触发RDB持久化模拟写入测试数据模拟进程异常RDB的优缺点优势劣势Redis AOF持久化Redis 安装Redis AOF配置AOF持久化模拟写入测试数据模拟进程异常AOF的…

Kubernetes(K8s)常用命令全解析:从基础到进阶

Kubernetes&#xff08;K8s&#xff09;常用命令全解析&#xff1a;从基础到进阶 引言&#xff1a;为什么掌握K8s命令是云原生时代的必备技能&#xff1f; Kubernetes&#xff08;简称K8s&#xff09;作为容器编排的事实标准&#xff0c;已成为云原生应用部署、扩展和管理的核…

深入解析StatefulSet与K8s服务管理

目录 一、Statefulset控制器&#xff1a;概念、原理解读 有状态服务 无状态服务 StatefulSet部分组成 Headless service 二、Statefulset资源清单文件编写技巧 三、Statefulset使用案例&#xff1a;部署web站点 四、Statefulset管理pod&#xff1a;扩容、缩容、更新 St…

GaussDB常用术语缩写及释义

序号 术语全称释义1ACLAccess Control List访问控制列表&#xff0c;被授权访问某一资源的实体及其访问权限的列表。2APIApplication Programming Interface应用程序接口&#xff0c;一些预先定义的接口&#xff08;如函数&#xff0c;http接口&#xff09;或指软件系统不同组…

工业一体机5G通讯IC/ID刷卡让MES系统管理更智能

在智能制造升级过程中&#xff0c;MES 系统作为生产执行的核心枢纽&#xff0c;其数据采集的实时性、准确性与管理安全性直接决定管理效能。传统 MES 系统常面临数据传输滞后、设备对接繁琐、权限管理粗放等问题&#xff0c;而工业一体机凭借 5G 通讯与 IC/ID 刷卡功能&#xf…

电脑开机几秒后就停止然后再循环是怎么回事

硬件问题电源问题&#xff1a;电源内部的滤波电容若出现鼓包或漏液现象&#xff0c;会导致电源供电不足&#xff0c;从而使电脑开机后自动停止并重新启动。另外&#xff0c;电源线连接不良、插座无电或电源供应器故障&#xff0c;也可能引发此问题。CPU 散热问题&#xff1a;如…

OSCP - Proving Grounds - Vanity

主要知识点Linux命令注入rsync 脚本劫持(以前tar 备份脚本劫持也是利用了类似的方法&#xff09;具体步骤nmap扫描结果&#xff0c;发现web服务开放&#xff0c;并且 rsync服务开放&#xff0c;值得研究一下Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-10-30 14:37 UT…

详细探讨AI在金融、医疗、教育和制造业四大领域的具体落地案例,并通过代码、流程图、Prompt示例和图表等方式展示这些应用的实际效果。

1. 引言&#xff1a;AI技术概述及其在各行业的重要性人工智能(AI)技术近年来取得了突破性进展&#xff0c;从理论研究走向了广泛的商业应用。AI的核心技术包括机器学习、深度学习、自然语言处理、计算机视觉等&#xff0c;这些技术正在深刻改变各行各业的运营模式和服务方式。在…

我的第一个开源项目:从0到1,我在GitHub写下的成长印记

文章目录每日一句正能量前言✨ 一、写在前面&#xff1a;那天我点下了 “Create Repository”&#x1f680; 二、为什么我要做这件事&#xff1f;&#x1f6e0;️ 三、CommonUtilLibrary 是什么&#xff1f;⚡ 四、第一次 Star 和第一次 Issue&#x1f9ed; 五、我从中学到了什…

数据结构(03)——线性表(顺序存储和链式存储)

Hi&#xff01;探索者们&#x1f609;&#xff0c;欢迎踏入 408 数据结构的奇妙秘境&#x1f33f;&#xff01;​ 我是 ankleless&#x1f4da;&#xff0c;和你并肩的寻宝人&#xff5e; 这是我的探险手札&#x1f5fa;️&#xff0c;里面记着链表森林的岔路陷阱&#x1f578;…

bun + vite7 的结合,孕育的 Robot Admin 【靓仔出道】(十三)

主题定制 &#x1f4d6; 阅读时间&#xff1a;7 分钟 | &#x1f3af; 等级&#xff1a;进阶 前言 Robot_Admin应用程序具有灵活的主题系统&#xff0c;支持浅色、深色和基于系统的模式&#xff0c;以及程序化的主题定制。本指南介绍了如何在开发工作中使用和扩展主题功能。 …

检测pytorch是否安装好

如果pytorch安装成功即可导入。import torch查看cuda是否可用&#xff0c;可用的话返回“ture”。print(torch.cuda.is_available())查看可用的cuda数量。print(torch.cuda.device_count())查看cuda的版本号。print(torch.version.cuda)

java八股文-(spring cloud)微服务篇-参考回答

一. 面试官&#xff1a;Spring Cloud 5大组件有哪些&#xff1f;Spring Cloud 的五大核心组件包括&#xff1a;注册中心&#xff1a;第一代使用 Eureka&#xff0c;第二代使用 Nacos。负载均衡&#xff1a;第一代使用 Ribbon&#xff0c;第二代使用 Spring Cloud LoadBalancer。…

发布npmjs组件库

一.初始化项目1.用Vite创建空项目2.安装打包与声明文件插件pnpm i -D vite-plugin-dts sass二.首先修改项目内容// src\index.ts import { type App } from vue; import oneComponent from "./components/oneComponent/index.vue"; import twoComponent from ".…