本文记录面向对象编程的核心概念类与对象、构造方法、方法重载以及继承与重写。通过一个「学生信息管理系统」的实战案例逐步理解 OOP 思想。一、类与对象1.1 引言今天主要学习了面向对象编程。面向对象不同于面向过程面向过程更注重于动作过程而面向对象更注重于对象本身。我们定义一个类类中有属性和方法拥有这些属性和方法的变量称为对象对象可以调用类中的方法。使用类提升了我们的代码复用性。当我们需要定义多个拥有同样属性和方法的变量时只需构造一个类将它们定义为该类的对象即可。例如我们需要存储多个人的个人信息并输出。如果不定义类和对象我们需要依次定义每个人的信息和输出这样会大大增加代码的冗余度如果定义类与对象我们可以减少重复的代码提升代码的复用性。1.2 定义 Student 类// 定义 Student 类的代码为internalclassStudent{/// summary/// 学号/// /summaryprivatestring_id;publicstringId{get{return_id;}set{if(value.Length8){_idvalue;}else{_idnull;}}}/// summary/// 姓名/// /summarypublicstring_name;publicstringName{get{return_name;}set{_namevalue;}}/// summary/// 年龄/// /summarypublicint_age;publicintAge{get{return_age;}set{if(value0value150){_agevalue;}}}/// summary/// 性别/// /summarypublicchar_sex;publiccharSex{get{return_sex;}set{if(value!男value!女){value男;}_sexvalue;}}publicstringAiHao;publicvoidJiBen(){Console.WriteLine($大家好我叫{Name}学号是{Id}我今年{Age}岁是个{Sex}生我的爱好是{AiHao});}}1.3 Main 函数代码staticvoidMain(string[]args){stringjiXu;do{Console.WriteLine(学生1张三\n学生2李四\n学生3王五\n学生4老六\n学生5改个蛋);Console.WriteLine(请输入要查看的自我介绍的学生代号为);intstudentNumConvert.ToInt32(Console.ReadLine());switch(studentNum){case1:Studentstudent1newStudent();student1.Name张三;student1.Sex男;student1.Age18;student1.Id26310101;student1.AiHao打篮球;student1.JiBen();break;case2:Studentstudent2newStudent();student2.Name李四;student2.Sex男;student2.Age19;student2.Id26310102;student2.AiHao打羽毛球;student2.JiBen();break;case3:Studentstudent3newStudent();student3.Name王五;student3.Sex女;student3.Age18;student3.Id26310103;student3.AiHao打篮球;student3.JiBen();break;case4:Studentstudent4newStudent();student4.Name老六;student4.Sex男;student4.Age19;student4.Id26310104;student4.AiHao踢足球;student4.JiBen();break;case5:Studentstudent5newStudent();student5.Name改个蛋;student5.Sex女;student5.Age18;student5.Id26310105;student5.AiHao打乒乓球;student5.JiBen();break;}Console.WriteLine(是否继续查看y/n);jiXuConsole.ReadLine();}while(jiXuy||jiXuY);}1.4 小结通过定义Student类我们只需创建不同的对象并赋值即可复用同一套属性和方法大大减少了重复代码这正是面向对象编程的核心优势。二、构造方法2.1 为什么需要构造方法上次我在面向对象提到过类与对象虽然提升了一定的代码复用率但是我们不难发现还是会有大量的对对象赋值的语句较为重复我们今天使用构造方法来进一步减少代码冗余度。例如// 定义 Student 类的代码为internalclassStudent{/// summary/// 学号/// /summaryprivatestring_id;publicstringId{get{return_id;}set{if(value.Length8){_idvalue;}else{_idnull;}}}/// summary/// 姓名/// /summarypublicstring_name;publicstringName{get{return_name;}set{_namevalue;}}/// summary/// 年龄/// /summarypublicint_age;publicintAge{get{return_age;}set{if(value0value150){_agevalue;}}}/// summary/// 性别/// /summarypublicchar_sex;publiccharSex{get{return_sex;}set{if(value!男value!女){value男;}_sexvalue;}}publicstringAiHao;publicvoidJiBen(){Console.WriteLine($大家好我叫{Name}学号是{Id}我今年{Age}岁是个{Sex}生我的爱好是{AiHao});}}2.2 不使用构造方法的 Main 函数staticvoidMain(string[]args){stringjiXu;do{Console.WriteLine(学生1张三\n学生2李四\n学生3王五\n学生4老六\n学生5改个蛋);Console.WriteLine(请输入要查看的自我介绍的学生代号为);intstudentNumConvert.ToInt32(Console.ReadLine());switch(studentNum){case1:Studentstudent1newStudent();student1.Name张三;student1.Sex男;student1.Age18;student1.Id26310101;student1.AiHao打篮球;student1.JiBen();break;case2:Studentstudent2newStudent();student2.Name李四;student2.Sex男;student2.Age19;student2.Id26310102;student2.AiHao打羽毛球;student2.JiBen();break;case3:Studentstudent3newStudent();student3.Name王五;student3.Sex女;student3.Age18;student3.Id26310103;student3.AiHao打篮球;student3.JiBen();break;case4:Studentstudent4newStudent();student4.Name老六;student4.Sex男;student4.Age19;student4.Id26310104;student4.AiHao踢足球;student4.JiBen();break;case5:Studentstudent5newStudent();student5.Name改个蛋;student5.Sex女;student5.Age18;student5.Id26310105;student5.AiHao打乒乓球;student5.JiBen();break;}Console.WriteLine(是否继续查看y/n);jiXuConsole.ReadLine();}while(jiXuy||jiXuY);}2.3 使用构造方法后的 Main 函数staticvoidMain(string[]args){stringjiXu;do{Console.WriteLine(学生1张三\n学生2李四\n学生3王五\n学生4老六\n学生5改个蛋);Console.WriteLine(请输入要查看的自我介绍的学生代号为);intstudentNumConvert.ToInt32(Console.ReadLine());switch(studentNum){case1:Studentstudent1newStudent(26310101,张三,18,男,打篮球);student1.JiBen();break;case2:Studentstudent2newStudent(26310102,李四,19,男,打羽毛球);student2.JiBen();break;case3:Studentstudent3newStudent(26310103,王五,18,女,打麻将);student3.JiBen();break;case4:Studentstudent4newStudent(26310104,老六,19,男,踢足球);student4.JiBen();break;case5:Studentstudent5newStudent(26310105,改个蛋,18,女,打乒乓球);student5.JiBen();break;}Console.WriteLine(是否继续查看y/n);jiXuConsole.ReadLine();}while(jiXuy||jiXuY);}2.4 构造方法的定义// 在类中// 在没有构造时默认为publicStudent(){}// 构造方法为publicStudent(stringid,stringname,intage,charsex,stringaiHao){Idid;Namename;Ageage;Sexsex;AiHaoaiHao;}三、方法重载指在一个类中定义多个一样的方法名但传入的参数的数量或者数据类型不完全相同。// 定义两个数相加方法的数据类型组合共用四种所以对方法 JiaFa 进行四种重载internalclassJiSuanQi{publicvoidJiaFa(intnum1,intnum2){Console.WriteLine(和为:(num1num2));}publicvoidJiaFa(doublenum1,intnum2){Console.WriteLine(和为:(num1num2));}publicvoidJiaFa(intnum1,doublenum2){Console.WriteLine(和为:(num1num2));}publicvoidJiaFa(doublenum1,doublenum2){Console.WriteLine(和为:(num1num2));}}四、继承与重写4.1 继承今天主要学习了继承和方法的重写。继承子类可以继承父类的属性和方法但是不能继承父类的私有字段。继承具有单根性和传递性单根性一个类只能有一个父类但是一个父类可以有多个子类。传递性继承具有传递性父类非私有的属性和方法可以被子类继承也可以被子类的子类继承。4.2 重写重写子类需要用到一个和父类同名的方法但是从父类继承的方法不能满足子类的需求此时我们在子类重写这个方法它们的形参和返回值都一样但是方法的内容可以改变。4.3 构造方法与 base 关键字如果我们在父类进行了构造方法子类不能直接继承这个构造方法而是要添加base形参例如Student继承Person类。// Person 类中的构造方法publicPerson(stringname,intage,stringsex){this.Namename;this.Ageage;this.Sexsex;}// Student 类中的构造方法publicStudent(stringname,intage,stringsex):base(name,age,sex){}当我们没有在子类重写的构造方法里写内容时会调用父类构造方法里的内容base()里的形参用于返还给父类。五、总结本文通过「学生信息管理系统」案例梳理了面向对象编程的四大核心知识点类与对象通过类封装属性和方法提升代码复用性。构造方法在创建对象时一次性完成属性赋值减少重复代码。方法重载同名方法通过不同参数类型/数量实现多态。继承与重写子类复用父类能力并通过重写满足个性化需求。
企业数字化 ERP 产品动态
相关推荐
YouTube 最初是个约会网站,没人用才成了视频帝国 YouTube 最初是个约会网站,没人用才成了视频帝国这个全球第二大网站,起点是一个"视频约会"App。反差:它本来是用来相亲的
2005 年情人节,三个前 PayPal 员工注册了 YouTube.com。他们的设想不是视频平台,而是… · 2026/9/26 11:08:23
教培AI推荐系统的查询理解与改写机制——面向开发者的技术解析 摘要在教培机构的AI推荐系统中,检索质量直接决定了推荐效果。但很多开发者只关注向量检索、重排序等环节,却忽视了一个更前置、更关键的步骤:查询理解(Query Understanding)。家长在AI系统里提出的问题,往往… · 2026/9/26 11:08:23
SpringBoot配置文件实战:YAML/Properties、属性注入与多环境管理 说实话,干Java这行,配置文件大概是每天都要碰的东西。哪怕你写的是个玩具Demo,只要用了SpringBoot,application.yml或者application.properties这两个文件基本就焊死在项目里了。我之前遇到过好几个刚转SpringBoot的同事ÿ… · 2026/9/26 14:00:18
保险风险预测:SVM与神经网络实战对比与特征工程指南 简介:面向保险行业数据分析与机器学习初学者,这份实战资源基于神经网络与支持向量机(SVM),提供了一套完整的保险风险预测方案。资源完整覆盖数据预处理、模型训练、参数调优与评估环节,帮助读者掌握用机器学… · 2026/9/26 14:00:18
Linux驱动移植中断子系统全解析:从硬件到代码的排查路径 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 14:00:18
Oracle EBS AP预付款管理:发票录入、支付核销与状态流转全解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 14:00:18
数据库课后习题答案别硬背:当测试用例集刷,效率翻倍 简介:万常选版《数据库原理与设计》课后习题答案资源,覆盖第2至6章及第9章,适合正在学习关系模型、数据库建模、关系数据理论与模式求精的本科生、自学者作为复习与自测材料。压缩包共7个文件,含3个doc参考答案、2个sql示例脚本、… · 2026/9/26 0:00:21
OpenClaw 替代品?Hermes Agent 踩坑实录:macOS 飞书接入 TaoToken 配置 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 0:00:40
向下兼容与向上兼容:接口设计中的兼容性策略与工程实践 一次版本升级事故,是很多团队绕不过去的坎。线上环境里,服务端明明已经上线了新版接口,老的移动端还在照着旧文档传参数。请求一到网关,校验直接拒绝,用户操作失败,客服群炸了锅,开发群里开始互… · 2026/9/26 0:00:46