一、封装

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

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

※访问修饰符

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

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

  1. Day55-每日一道Java面试题-Java 面向对象编程三大特性: 封装 继承 多态

    Java 面向对象编程三大特性: 封装 继承 多态 封装 封装把一个对象的属性私有化,同时提供一些可以被外界访问的属性的方法,如果属性不想被外界访问,我们大可不必提供方法给外界访问.但是如果一个类没有 ...

  2. python多态的三种表现形式_python小结----面向对象的三大特征(封装,继承,多态)

    面向对象的三大特征: 封装,继承,多态 面向对象的编程思想核心:高类聚,低耦合–程序的设计模式范畴 封装 什么是封装: 在面向对象编程的思想中,对代码进行高度封装,封装又叫包装 封装就是指将数据或者函 ...

  3. 深入理解Java面向对象三大特性 封装 继承 多态

    1.封装 封装的定义: 首先是抽象,把事物抽象成一个类,其次才是封装,将事物拥有的属性和动作隐藏起来,只保留特定的方法与外界联系 为什么需要封装: 封装符合面向对象设计原则的第一条:单一性原则,一个类 ...

  4. Java面向对象三大特性(封装继承多态)解释及案例

    文章目录 包 包基本语法 命名规则 命名规范 导入包实例 访问修饰符 面向对象编程-封装 面向对象编程-继承 super关键词 super和this的比较 方法重写/覆盖 (override) 注意事 ...

  5. Python全栈开发——面向对象的三大特性(继承 多态 封装)

    1.继承 1.两层意思 改变和扩展(详细看随笔继承和组合) 2.多态(体现在运行时的状态) 1.不同的类可以调用相同的方法,得到不同的结果 2.实际上是继承的一种体现机制 class H2o:def ...

  6. Python学习笔记④——类、面向对象的三大特征 [封装+继承+多态]

    ✅ Blogger Learns Python is for learning the "Deep Learning". 文章目录 一.面向对象编程的简介 二.类与对象 -- 基础 ...

  7. OC面向对象的三大特征(封装 继承 多态)习题2 复合

    复合:一个类中有一个成员变量是另外一个类的对象. 比如我现在要制作一台电脑,电脑需要CPU,显示器,鼠标和键盘等.这些东西的研发都是很复杂的过程.如果现在有成型的CPU等组件,就可以直接用这些组件攒一 ...

  8. 【Golang第8章:面向对象编程】Go语言的结构体是什么,怎么声明;Golang方法的调用和声明;go语言面向对象实例,go语言工厂模式;golang面向对象的三大特性:继承、封装、多态

    介绍 这个是在B站上看边看视频边做的笔记,这一章是Glang面向对象编程 这一章内容较多,内容有Go语言的结构体是什么,怎么声明:Golang方法的调用和声明:go语言面向对象实例,go语言工厂模式: ...

  9. 到底什么是面向对象,面试中怎么回答。面向过程和面向对象的区别是什么。java跨平台特性以及java和C++的区别。面向对象的三大特性——封装、继承和多态。面向对象的高拓展性以及低耦合度怎么体现?

    Java语言具有的特点:面向对象.跨平台.多线程以及网络编程 1. 和C++的区别 1.1 Java隐蔽了C++的指针,避免指针直接操作,程序更加安全. 1.2 Java类继承只能单继承,避免了C++ ...

  10. Python - 面向对象编程 - 三大特性之继承

    继承 继承也是面向对象编程三大特性之一 继承是类与类的一种关系 定义一个新的 class 时,可以从某个现有的 class 继承 新的 class 类就叫子类(Subclass) 被继承的类一般称为父 ...

最新文章

  1. “环太平洋”走进现实,五角大楼研发人与武器互动的意念控制技术
  2. numpy.triu详解
  3. 通道抠图--火焰,背景颜色统一为黑色
  4. 运用alarm系统调用检测网络是否断开
  5. python 接口测试 如何写配置文件_python接口自动化测试二十九:yaml配置文件的写和读...
  6. 语言4位bcd码怎么加加_S7300400如何使用SCL语言调用SFC1(READ_CLK)读取日期和时间?...
  7. RequireJS模块的建立:插件化体验 - demo演示篇
  8. php清除h5格式,移动端H5页面端怎样除去input输入框的默认样式
  9. redis系列-redis的持久化
  10. python之集合操作 - |
  11. C++ - 命名空间,argc和argv详解,游戏人生介绍
  12. linux 命令行参数解析,Linux C下的命令行参数解析
  13. 人工智能就是计算机科学的英语,人工智能的英语解释
  14. eWebEditor的使用
  15. matplotlib折线图(标记点、标记点大小、标记点边颜色、标记点边宽)
  16. 卷积和反卷积输出的计算公式
  17. 基于Python的个人足迹地图绘制设计
  18. 写点看Harvard CS50 公开课的感受
  19. .Net/C#: 一个将在线简体中文网页转为繁体中文页简单方法
  20. outlook 日历共享_如何共享您的Outlook日历

热门文章

  1. django-form and fields validation
  2. NOIP2007 count 统计数字
  3. ABAP 弹出框自建内容POPUP
  4. Windows Phone 7 开发积累_04
  5. geoserver native JAI error 问题解决方法
  6. 在C#里,如何执行cmd里的常用dos命令 (转)
  7. 编程实现背包的递归和非递归两种解法_算法动态规划(七)背包问题4
  8. mysql 批量添加字段前缀_MySQL中批量前缀表的sql语句
  9. 安卓真机如何连接本地服务器_一分钟搭建可供手机访问的本地服务器 (安卓,ios手机通用)...
  10. C语言程序设计上机前三题,C语言程序设计(含上机实验与习题解答)