一、三大特性

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

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

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

二、【封装】特性

  把类内部的数据隐藏,不让对象实例直接对其操作,通过给类及类中的成员变量、属性和方法设置不同的访问修饰符(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. html行内元素、块级元素及空元素有哪些?区别是什么?

    一. html标签有哪些? 1)行内元素有哪些? 行内元素:行内大多为描述性标记 <span>...</span> <a>...</a>  链接. 锚点 ...

  2. ctf-ping命令执行绕过

    题目连接:http://ctf.klmyssn.com/challenges#Ping 命令执行绕过,试了试过滤了一些:一些命令 但是反引号可以执行命令 通过拼接,可以拼接出来:ls 命令 127.0 ...

  3. 在vue项目中使用MD5.js

    1.安装 npm install --save js-md5 2.引入 import md5 from 'js-md5'; 3.使用 md5('holle') // bcecb35d0a12baad4 ...

  4. 题解【AcWing10】有依赖的背包问题

    题面 树形 DP 的经典问题. 我们设 \(dp_{i,j}\) 表示当前节点为 \(i\),当前节点的子树(包含当前节点)最多装的体积是 \(j\) 的最大价值. 我们遍历节点的过程就相当于做了一遍 ...

  5. Hadoop的完全分布式搭建

    一.准备虚拟机两台 1.将虚拟机进行克隆https://www.cnblogs.com/the-roc/p/12336745.html 2.1将克隆虚拟机的IP修改一下 vi /etc/sysconf ...

  6. SQLserver还原提示正在还原中。解决方法

    今天在Sqlerver还原数据库时一直就卡在那里提示“正在还原…”的状态,此时无法操作数据库,下面我来给大家介绍解决些问题的方法 解决方法: RESTORE DATABASE demo FROM DI ...

  7. C++——标准模板库

    1.泛型程序设计:将程序尽可能写的通用,将算法从特定的数据结构中抽象出来,成为通用的:C++模板为泛型程序设计奠定了关键的基础:STL是泛型程序设计的一个范例:容器container.迭代器itera ...

  8. AntDesign(React)学习-8 Menu使用 切换框架页内容页面

    本节实现一个点击左侧menu在右侧content切换页面效果,原始代码请从UMI学习-6开始看 1.在pages下添加两个组件,User,UserRole import React from 'rea ...

  9. 微信小程序块导航

    1.wxml页面 <!--index.wxml--> <swiper current="{{currentTab}}" class="swiper-bo ...

  10. SQL Server查询中特殊字符的处理方法 (SQL Server特殊符号的转义处理)

    SQL Server查询中特殊字符的处理方法 (SQL Server特殊符号的转义处理) SQL Server查询中,经常会遇到一些特殊字符,比如单引号'等,这些字符的处理方法,是SQL Server ...