一、三大特性

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

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

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

二、【封装】特性

  把类内部的数据隐藏,不让对象实例直接对其操作,通过给类及类中的成员变量、属性和方法设置不同的访问修饰符(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. create_function()代码注入

    00x00create_function()函数的简介 适用范围:PHP 4> = 4.0.1,PHP 5,PHP 7 功能:根据传递的参数创建匿名函数,并为其返回唯一名称. 语法: creat ...

  2. javaweb基础备忘

    Request对象的主要方法有哪些 setAttribute(String name,Object):设置名字为name的request 的参数值 getAttribute(String name): ...

  3. AcWing 11. 背包问题求方案数

    //g[i,j]表示f[i,j]取最大值的方案数目 //体积最多是j 全部为0,v>=0 //体积恰好为j f[0][0]=0,f[i]=无穷,v>=0 //体积至少是j f[0][0]= ...

  4. Wannafly Camp 2020 Day 1C 染色图 - 组合数学,整除分块

    定义一张无向图 G=⟨V,E⟩ 是 k 可染色的当且仅当存在函数 f:V↦{1,2,⋯,k} 满足对于 G 中的任何一条边 (u,v),都有 f(u)≠f(v). 定义函数 g(n,k) 的值为所有包 ...

  5. localStorage存、取数组

    localStorage存储数组时需要先使用JSON.stringify()转成字符串,取的时候再字符串转数组JSON.parse(). var arr=[1,2,3,4]; localStorage ...

  6. 安卓开发中遇到java.net.SocketException: Permission denied

    仅需在AndroidManifest.xml添加 <uses-permission android:name="android.permission.INTERNET" /& ...

  7. 如何使用cmd操作数据库

    1.首先用win+r输入cmd打开命令工具 (https://www.mysqlzh.com/=>'mysql中文文档地址') 然后用cd 命令进入你mysql的根目录 (bin目录下) 输入命 ...

  8. C 库函数 - strncpy()

    描述 C 库函数 char *strncpy(char *dest, const char *src, size_t n) 把 src 所指向的字符串复制到 dest,最多复制 n 个字符.当 src ...

  9. 使用Vue创建一个新项目

    1.环境 保证已经安装好了node\npm\vue等工具,将路径设置为想要建立新项目的文件夹路径 2.关于npm与cnpm npm包管理器,是集成在node中的,node环境安装完成,npm包管理器也 ...

  10. 训练20191009 2018-2019 ACM-ICPC, Asia East Continent Finals

    2018-2019 ACM-ICPC, Asia East Continent Finals 总体情况 本次训练共3小时20分钟,通过题数4. 解题报告 D. Deja vu of - Go Play ...