一、三大特性

  封装: 把客观事物封装成类,并把类内部的实现隐藏,以保证数据的完整性

  继承:通过继承可以复用父类的代码

  多态:允许将子对象赋值给父对象的一种能力

二、【封装】特性

  把类内部的数据隐藏,不让对象实例直接对其操作,通过给类及类中的成员变量、属性和方法设置不同的访问修饰符(public、protected、internal、

  protected internal、private)来控制它们的作用范围,以达到封装的目的。

  实例:

  (1)  没有封装的类:

     public class Animal
{
public string _name;
public int _age;
}
static void Main(string[] args)
{
Animal animal = new Animal();
animal._name = "sheep";
animal._age = -;
}

  (2)  封装后的类:

     public class Animal
{
private string _name;
private int _age; public string Name
{
get { return _name; }
set { _name = value; }
} public int Age
{
get { return _age; }
set
{
if (value < || value > )
{
throw (new AggregateException("年龄必须在0~10岁之间!"));
}
_age = value;
}
}
}

二、【继承】特性

  1、通过继承,程序可实现对父类代码的复用,子类继承父类的所有成员(构造函数 、析构函数、静态类、密封类除外),子类无需再定义父类中已有定义的代码。

  2、被继承的类成为父类、基类、超类,而主动继承的类成为子类或派生类,Object是所有类的基类。

  3、当父类和子类中有名称相同的方法时,父类中的方法会被隐藏

  4、里氏替换原则:子类对象可以赋值给父类变量,反之不成立

  5、子类不能对父类的私有成员进行访问,只能对公有成员和保护成员访问,但子类可以通过调用公有成员或保护方法间接的对私有成员进行访问

 实例:

 //基类:Animal
public class Animal
{
private string _name;
private int _age; public string Name
{
get { return _name; }
set { _name = value; }
} public int Age
{
get { return _age; }
set
{
if (value < || value > )
{
throw (new AggregateException("年龄必须在0~10岁之间!"));
}
_age = value;
}
}
} //子类:羊
public class Sheep : Animal
{ } //子类:马
public class Horse : Animal
{ } static void Main(string[] args)
{
Sheep sheep = new Sheep();
sheep.Name = "Xi Yangyang";
sheep.Age = ; Horse horse = new Horse();
horse.Name = "Qian Li";
horse.Age = ;
}

三、【多态】特性

  1、相同类型的对象调用相同的方法表现出不同的行为。

  2、两种表现形式:重载、重写

  3、重载:同一个类中有多个方法的名称相同、参数个数不同或类型不同

  4、重写:使用 virtua l和 override 关键字实现方法重写,只有基类成员声明为virtual 或 abstract,才能被派生类重写。

  5、以下3种情况重写:

    a、当类为普通类时,只有父类的虚方法才能被子类重写,子类实现重写要用关键字override,如果不加override就会隐藏父类的方法,

       隐藏需要加上关键字new,例如:

      public new static void a()

      {

      }

      或

      public static new void a()

      {

      }

     静态类中只能有静态成员,非静态类中可以有静态成员和非静态成员。

     静态方法不能被重写,但可以被隐藏。

             静态成员不能带override、abstract、virtual。
   b、
抽象类中可以有抽象属性、抽象方法和成员实例,继承抽象类的子类必须直接或间接重写所有的抽象方法,而且参数和返回值类型必须完全一致,

     成员实例可以不被重写。

      非抽象类中只能有成员实例。

      抽象类不能直接实例化,但是有构造方法,可以利用里氏替换原则把子类对象赋值给抽象的父类变量。

      抽象方法必须用abstract修饰,而且不能有方法体。

      抽象方法不能用private修饰。

   c、类是单继承,接口是多继承,如果同时继承类和接口的话,接口必须在基类的后面,否则编译会出错。

      接口不能直接实例化,没有构造方法,可以利用里氏替换原则把子类对象赋值给接口类型的父类变量。

      接口中的成员没有访问修饰符,默认是public类型的,而且不能手动添加任何访问修饰符。

      实现接口时不需要override,实现接口的类中的方法的参数和返回值类型必须与接口中定义的类型完全一致。

      接口命名一般以I开头,表示某种功能,实现某一接口表示具备了某一功能。

  6、使用sealed关键字阻止派生类重写基类虚成员。

  7、使用New关键字隐藏基类成员:当子类中需要添加的方法与基类中的方法名相同,使用new关键字隐藏基类方法,但如果想要强制访问基类方法,

    则可使用强制类型转换,把子类强制转换成基类类型,例如:

 //基类:Animal
public class Animal
{
private string _name;
private int _age; public string Name
{
get { return _name; }
set { _name = value; }
} public int Age
{
get { return _age; }
set
{
if (value < || value > )
{
throw (new AggregateException("年龄必须在0~10岁之间!"));
}
_age = value;
}
} public void Eat()
{
Console.WriteLine("动物的吃方法");
}
} //子类:羊
public class Sheep : Animal
{
public new void Eat()
{
Console.WriteLine("羊的吃方法");
}
} static void Main(string[] args)
{
Sheep sheep = new Sheep();
sheep.Name = "Xi Yangyang";
sheep.Age = ;
sheep.Eat();
((Animal)sheep).Eat(); //子类强制转换成基类方法 Horse horse = new Horse();
horse.Name = "Qian Li";
horse.Age = ; Console.Read();
}

    

     

对C#面向对象三大特性的一点总结的更多相关文章

  1. [.net 面向对象编程基础] (12) 面向对象三大特性——继承

    [.net 面向对象编程基础] (12) 面向对象三大特性——继承 上节我们说了面向对象的三大特性之一的封装,解决了将对同一对象所能操作的所有信息放在一起,实现统一对外调用,实现了同一对象的复用,降低 ...

  2. [.net 面向对象编程基础] (11) 面向对象三大特性——封装

    [.net 面向对象编程基础] (11) 面向对象三大特性——封装 我们的课题是面向对象编程,前面主要介绍了面向对象的基础知识,而从这里开始才是面向对象的核心部分,即 面向对象的三大特性:封装.继承. ...

  3. [.net 面向对象编程基础] (13) 面向对象三大特性——多态

    [.net 面向对象编程基础] (13) 面向对象三大特性——多态 前面两节,我们了解了面向对象的的封装和继承特性,面向对象还有一大特性就是多态.比起前面的封装和继承,多态这个概念不是那么好理解.我们 ...

  4. 面向对象编程(九)——面向对象三大特性之继承以及重写、Object类的介绍

    面向对象三大特性 面向对象三大特征:继承 :封装/隐藏 :多态(为了适应需求的多种变化,使代码变得更加通用!) 封装:主要实现了隐藏细节,对用户提供访问接口,无需关心方法的具体实现. 继承:很好的实现 ...

  5. C++面向对象三大特性

    面向对象三大特性 继承 public protected private public继承 public protected 不可见 private继承 private private 不可见 pro ...

  6. JAVA基础——面向对象三大特性:封装、继承、多态

    JAVA面向对象三大特性详解 一.封装 1.概念: 将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问. 2.好处: 只能通过规定的方法访问数据. ...

  7. day20面向对象三大特性 , 类嵌套

    #!/usr/bin/env python# -*- coding:utf-8 -*- # 1.简述面向对象三大特性并用代码表示."""封装:class Account: ...

  8. python 面向对象(三大特性)

    python 面向对象(初级) (思维导图 ↑↑↑↑↑) 概述: 面向过程:根据业务逻辑从上到下垒代码. 函数式:将某功能代码封装至函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类 ...

  9. python 面向对象三大特性(封装 多态 继承)

    今天我们来学习一种新的编程方式:面向对象编程(Object Oriented Programming,OOP,面向对象程序设计)注:Java和C#来说只支持面向对象编程,而python比较灵活即支持面 ...

随机推荐

  1. 前端开发 css、less编写规范

    壹 ❀ 引 早在大半年前,我在负责整理定义了前端组JavaScript开发规范与less.css样式开发规范.一直想将两个规范整理成文章,但在整理了JavaScript规范后,我花了较多的时间在学习J ...

  2. 关闭Apache的目录浏览功能

    一.默认情况 默认情况下,Apache的配置文件C:\web\apache2.4\conf/httpd.conf中有如下参数: 引用 <Directory "/var/www/html ...

  3. JXLS支持嵌套循环语法的数据导出说明

    今天在试验用Jxls 2.0导出嵌套循环数据时,第二层数据一直没有成功,最后确认是数据源结构不正确所致,现将这两种数据格式进行说明:假设模板中批注有这样两条循环语法: <jx:each(item ...

  4. Win10安装5 —— 系统安装步骤

    本文内容皆为作者原创,如需转载,请注明出处:https://www.cnblogs.com/xuexianqi/p/12369698.html 1.打开U盘中的解压好的文件夹后,双击打开"s ...

  5. Notepad++ 个人洁癖

    插件: JSON Viewer 可以以树的形式查看JSON,同时可以格式化JSON,增加缩进. NppExport 可以高亮复制 下载地址: https://github.com/chcg/NPP_E ...

  6. mybatis-plus - buildSqlSessionFactory()

    一. buildSqlSessionFactory() mybatis-plus 同样的是调用  factory.getObject() 方法来进行 SqlSessionFactory 创建的. 然后 ...

  7. vue学习指南:第十五篇(详细) - Vuex

    Vuex 一.基础 1. Vuex 相当于 vue的数据仓库 2. Vuex 是 vue 的状态管理工具 3. Vuex中的 state 只能通过mutations 改变 4. Vuex很适合做购物车 ...

  8. Linux忘记 root密码的解决办法

    很多朋友经常会忘记Linux系统的root密码,linux系统忘记root密码的情况该怎么办呢?重新安装系统吗?当然不用!进入单用户模式更改一下root密码即可. 步骤如下: 重启linux系统 重启 ...

  9. vector,list不是模板

    vector和list在命名空间std里,还需要添加声明 using namespace std;   或者 std::list 也可以.

  10. 持续集成与自动化部署---代码流水线管理及Jenkins和gitlab集成

    1.代码流水线管理 Pipeline名词顾名思义就是流水线的意思,因为公司可能会有很多项目.如果使用jenkins构建完成后,开发构建项目需要一项一项点击,比较麻烦.所以出现pipeline名词. 代 ...