面向对象(二)——三大特性(封装、继承、多态)

一、封装

目的保护类,让类更加安全。

做法让类里面的成员变量变为私有(即访问修饰符)的,做相应的方法或者属性去间接的操作成员变量

※访问修饰符

private 私有的              只能在该类中访问

protected 受保护的       只能在该类和它的子类中访问

public 公有的                在任何地方都可以访问

 

封装成员方法来间接操作类里面的成员变量

例:

 

class Ren{private string name;private int age;  //年龄必须在18-50之间//取age的值public int GetAge(){return age;}//给age赋值public void SetAge(int a){if (age >= 18 && age <= 50){age = a;}else{age = 18;}}//取name的值public string GetName(){return name;}//给name赋值public void SetName(string n){name = n;}}
View Code

 

static void Main(string[] args){Ren r = new Ren();r.SetAge(8);r.SetName("张三"); //将’张三‘赋值给成员nameConsole.WriteLine(r.GetAge+r.GetName);Console.ReadLine();}
View Code

△使用成员属性来间接访问类里面的成员变量

  定义变量的时候最好用_下划线开头

  选中要做的成员变量右键→重构→封装字段(ctrl+r,e)

      自动生成的代码不是成员变量也不是成员方法  是成员属性

      造好之后可以通过成员属性操作成员变量

例:

class Student{private string _Name;public string Name{get { return _Name; }//简化的方法set { _Name = value; }}private int _Age;public int Age {get { return _Age; }set {if (value >= 18 && value <= 50){_Age = value;}else{_Age = 18;}}}private string _Sex;public string Sex {get;set;}//简写 缺点:不能控制值,不能用于构造函数}
View Code
static void Main(string[] args){Student s = new Student();s.Name="赵四";s.Sex="";s.Age=19;Console.WriteLine(s.Sex+s.Name+s.Age);Console.ReadLine();}
View Code

构造方法(函数):

作用造对象所要调用的方法,用来创建对象

      每一个类都有一个构造方法,不写也有只不过看不到而已

特殊性写法特殊 (方法名=类名;没有返回值)

      执行时间特殊(创建对象时执行)

用途可以对成员进行初始化

举个例子:

class Student{public Student(string s,string n){_Sex = s;_Name = n;}}
View Code

 

static void Main(string[] args){Student s = new Student("","张三");//new Student()就是调用了一个方法
Console.WriteLine(s.Sex+s.Name);Console.ReadLine();}
View Code

举个栗子使用面向对象来求两个圆之间的面积

class Program{static void Main(string[] args){Yuan y1 = new Yuan();y1.R = 10;Yuan y2 = new Yuan();y2.R = 5;double cha = y1.mianji() - y2.mianji();Console.WriteLine(cha);Console.ReadLine();}}class Yuan{private int r;public int R{get { return r; }set { r = value; }}public double mianji(){return r * r * 3.14;}public double zhouchang(){return 2 * r * 3.14;}}
View Code

函数重载

函数重载需要的条件:函数名要相同,参数的个数或者参数的类型不同

this关键字:

虽然写在类里面,但不是属于类的,而是属于该对象的

一般来说在类里面 this关键字是可以省略的,但是如果有一个方法形参名字和成员名字重复,这时候再调用该对象里面的成员的时候需要加this关键字

is关键字: 判断变量是不是属于某个类型

例:if (y2 is Ren)   

    {     

                 s = "是一个人";   

    }   

    else   

    {     

                s = "不是一个人";   

    }

as关键字: 转换类型(只能转换兼容类型,可以将子类对象转换为父类对象)

二、继承

子类可以继承父类的一切

特点:单继承   一个子类只能有一个父类  一个父类可以有多个子类

C#特殊点:所有类的祖先都是object

base关键字:在子类中代表父类对象,用法和this关键字相同         

                   如果父类有构造方法,那么子类也要有构造方法,如果父类构造需要参数,那么子类构造也必须有相应的参数。         

                   子类构造后面可以通过base调用父类的构造方法         

                   public China(string m):base(m) {}

class Program{static void Main(string[] args){China c = new China("zs");Console.WriteLine(c.Eat());Console.ReadLine();}}class Ren{private string _Name;public string Name{get { return _Name; }set { _Name = value; }}private int _Age;public int Age{get { return _Age; }set { _Age = value; }}//父类的构造方法public Ren(string n){_Name = n;}public string Speak(){return _Name+"人类正在讲话";}}class China:Ren{public China(string m):base(m){}public string Eat(){return base.Name+"用筷子吃饭";//return base.Speak();
        }}class America : Ren{public America(string m): base(m){}public string Eat(){return "用刀叉吃饭";}}
View Code

sealed关键字

密封类 该类不可以被继承

sealed class 类名

{

}

部分类:partial

可以将一个类拆分成多个部分,分别放在多个文件内

调用需要namespace相同,或用use引用

namespace 命名空间 相当于虚拟文件夹

partial class 类名   //拆分的类均加partial

{

}

三、多态

1.编译多态

函数重载

2.运行多态

概念当父类引用指向子类实例的时候,由于子类对父类的方法进行了重写,在调用该方法的时候表现出的不同就称为多态

条件必须要有继承  父类引用指向子类实例  子类必须对父类的方法进重写

里氏代换原则:如果有一个地方需要使用到父类对象,那么你可以将一个子类对象给他

class Program{static void Main(string[] args){DongWu dw = new Dog();            Dog d = new Dog();Console.WriteLine(Ceshi(dw));Console.WriteLine(CeShi(d));Console.ReadLine();}public static string CeShi(DongWu d){return "ok";}}class DongWu{public virtual string Eat() //虚方法
        {return "该动物在吃饭";}}class Dog:DongWu{public override string Eat() //重写
        {return "狗正在吃骨头";}}class Cat : DongWu{public override string Eat(){return "猫正在吃鱼";}}
View Code

 

转载于:https://www.cnblogs.com/H2921306656/p/5794359.html

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

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

相关文章

伸展树的代码实现

一、伸展树的数据结构 typedef struct Node {int key; struct Node *lch,*rch,*parent; }* Node ,* Tree; 二、伸展树的基础操作 下面几个函数中&#xff0c;设x 的父节点为 p, p的父节点为g 。 zig( t , x ) 右旋。当p是根节点&#xff0c;x是p的左孩子&#xff0c;将…

枚举命名规范_UE4 C++基础教程 - 编码规范

为什么要学习编码规范&#xff1f;良好的编码规范不仅利于项目维护&#xff0c;也增加了代码辨识度。使我们在阅读代码时能够更加清晰的理解代码意图。维护编码规范不是一件机械化的工作&#xff0c;它更像是一门艺术&#xff0c;让我们在有限的规范内发挥自己的创造力。除此之…

Cocos2d-x之Log输出机制

| 版权声明&#xff1a;本文为博主原创文章&#xff0c;未经博主允许不得转载。 在cocos2d-x中&#xff0c;我们使用log这个函数进行输出&#xff0c;log可以输出很多参数&#xff0c;它的使用方式就和使用c语言中的printf的使用方式差不多。log其实是一个跨平台的日志输出的…

python接口测试jason_Python 接口测试之Json数据文件操作

引言 前面说过接口测试就是数据的测试&#xff0c;在测试之前&#xff0c;需要准备好测试数据&#xff0c;而测试数据可以用数据库、excel、txt和csv方式&#xff0c;当然还有一种方式&#xff0c;那就是使用json文件来储存测试数据。常用的方式就是这些。 设计思路 python读取…

城市轮廓线求解

问题描述 每一个建筑物用一个三元组表示(L, H, R), 表示左边界, 高度和右边界,轮廓线用X,Y,X,Y…这样的交替式表示,给N个建筑&#xff0c;求轮廓线。 总体思路 首先&#xff0c;要将建筑物离散成点或线&#xff0c;方便运算。将建筑物表示成&#xff08;L,H&#xff09;,(R,…

wpf的listbox循环数据滚动_滚动版 CentOS Stream 和 Fedora 的关系

如果 CentOS 现在位于 RHEL 的上游&#xff0c;那么 Fedora 会发生什么&#xff1f;那不是 Fedora 在 Red Hat 生态系统中的角色吗&#xff1f;-- Matthew Miller&#xff08;作者&#xff09;一封来自 Fedora 项目负责人办公室的信件&#xff1a;&#xff08;LCTT 译注&#x…

求无序序列每个元素最接近的值

1、问题描述 给一个n个元素的线性表A&#xff0c;对于每个数Ai&#xff0c;找到它之前的数中&#xff0c;和它最接近的数。 即对于每个i&#xff0c;求 Ci min{ |Ai -Aj | | 1< j < i} 1.2算法分析 有两种思路可以解决上诉问题&#xff1a; &#xff08;1&#xff0…

maven引入springframework的猫腻

看官网的quickstart&#xff0c;以为maven只要将quickstart里的配置复制到项目里就好了&#xff0c;但是在项目中使用jdbc和事物时&#xff0c;都提示找不到相关的类&#xff0c;才知道原来官网文档还有猫腻。 maven引入spring框架 project下框架有点多&#xff0c;点spring …

bigdecimal 小于等于0_半场0-0比分的比赛,你需要注意这些

大家好&#xff0c;我是师弟&#xff0c;今天给大家带来有关于半场0-0比赛的分析。前段时间有朋友向我吐槽道&#xff1a;“最近买半场0-0的比赛输惨了”&#xff0c;经过询问了解到他是专挑半场0-0的比赛在中场的时候买入大1.5&#xff0c;没想到输多赢少。而他的想法可能也代…

将chart放入panel中出现滚动条_聊天场景在web前端开发中的体验与优化

在日常工作中&#xff0c;如下图的聊天场景是不是很熟悉&#xff0c;没错就是我们再熟悉不过的 QQ 和微信&#xff0c;一个正常的聊天界面大致上是长这个样子的&#xff1a;这种聊天窗口的消息流有两个明显的特点&#xff1a;最新的消息和滚动条初始位置需要在列表的最底部下拉…

一个(伪)MaterialDesign风格的博客园皮肤

皮肤长什么样&#xff0c;不用我说&#xff0c;相信各位点进来的看官都能看得一清二楚。 有关其他细节呢&#xff0c;也欢迎各位在我博客里逛逛&#xff0c;帮忙挑挑刺&#xff0c;提提建议。 由于水平有限&#xff0c;暂没能用CSS处理博客园的代码高亮字体&#xff0c;实在是有…

git checkout 单个文件_IntelliJ IDEA下的使用 Git

作者| JKYO链接 | cnblogs.com/pejsidney/p/9199115.html1、Git 简介Git是目前流行的分布式版本管理系统。它拥有两套版本库&#xff0c;本地库和远程库&#xff0c;在不进行合并和删除之类的操作时这两套版本库互不影响。也因此其近乎所有的操作都是本地执行&#xff0c;所以在…

小甲鱼c语言课后作业_知识,就是力量——山财“学习小课堂”助你蓄力

编者按少年&#xff0c;你渴望 知识的力量 吗&#xff1f;我们有山财最全的学习秘籍&#xff0c;只待你的耐心翻阅与潜心修炼&#xff01;接下来&#xff0c;就让我们一起查收学习干货~内容摘要本系列推送分为【悦览篇】【干货篇】【招募篇】三大模块。【悦览篇】编者会为大家推…

初步认识spring mvc

spring mvc 01Spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架&#xff0c;即使用了MVC架构模式的思想&#xff0c;将web层进行职责解耦&#xff0c;基于请求驱动指的就是使用请求-响应模型&#xff0c;框架的目的就是帮助我们简化开发&…

sdk怎么用_PLC不支持OPC UA怎么办?别问了看完你就懂了

经常有人会烦恼这个问题&#xff1a;我的上位机软件什么功能都有&#xff0c;也支持OPC UA了&#xff0c;现在项目上准备用OPC UA的方式来获取我的PLC的数据&#xff0c;但是我的PLC却不支持OPC UA&#xff0c;怎么办呢&#xff1f;有的人碰到这个问题后就开始了“病急乱投医”…

js学习大法:用好firebug,走遍天下都不怕

用js有一段时间了&#xff0c;但是一直手感不好。平时用DW来写js代码&#xff0c;常抱怨js的编辑器的自动代码提示和调试功能用起来很不爽&#xff0c;自动代码提示十分有限&#xff0c;而且写错一个单词这样的错误都要运行整个网页之后才发现。今天闲来无聊&#xff0c;翻看了…

python杀死了excel_Python杀死了Excel|自动更新表格,告别繁琐

大家好&#xff0c;又到了Python办公自动化专题。 今天我们讲解的案例是如何使用Python自动更新Excel表格&#xff0c;简单来说就是每天都会对Excel中多个sheet进行更新&#xff0c;需要操作完后可以用程序完成第一张sheet 汇总表的更新&#xff0c;大概就是这样&#x1f447;当…

TP-LINK路由器连接网线上网教程(租房必备)

租的房子&#xff0c;房子里只有一根普通网线&#xff0c;连着房东家的路由器&#xff0c;这时可以使用TP-LINK路由器使用LAN-WAN级联的方式&#xff0c;在室内搭建一个局域网。 设置教程 准备材料&#xff1a;1根网线 重置路由器&#xff1a;启动路由器&#xff0c;使用牙签…

推荐一款非常强大的扒站工具

在平时的开发或者学习的过程中&#xff0c;我们难免会看到一些让人心动的网站&#xff0c;于是自己想把它弄下来&#xff0c;自己手工一个文件一个文件把它保存下来不太可能&#xff0c;那得累死你&#xff0c;下面我推荐一款扒站的神器&#xff0c;可以把你所喜欢的目标网站整…

无刷新分页 jquery.pagination.js

序言 这一款js分页使用起来很爽&#xff0c;自己经常用&#xff0c;做项目时总是要翻以前的项目看&#xff0c;不方便&#xff0c;这里就把他写出来方便自己以后粘帖&#xff0c;也希望能分享给大家。友情提示下&#xff1a;我有一片博客是用着个js实现的无刷新分页也很好用&am…