现实生活中的事物都归属于一定的类别,比如,狮子是一种(IS_A)动物,为了在计算机中模拟这种关系,面向对象的语言引入了继承(inherit)特性。

构成继承关系的两个类中,Animal称为父类(parent class)或基类(base class),Lion称为子类(child class)。

父类与子类之间拥有以下两个基本特性:

1.是一种(IS_A)关系:子类是父类的一种特例。

2.扩充(Extends)关系:子类拥有父类所没有的功能。

 class Animal
{ }
class Lion : Animal
{ }

可以看到,C#中用一个冒号间隔开父类和子类。

类成员的访问权限

面向对象编程的一大特性就是可以控制类成员的可访问性。当前主流的面向对象语言都拥有以下三种基本的可访问性

继承条件下的类成员访问权限

1.所有不必让外人知道的东西都是私有的。

2.所有需要向外提供服务都是公有的。

3.所有的“祖传秘方”,“秘不外传”的都是保护的。

internal

关键字internal所确定的“内部”访问性。

internal有点像public,外界类也可以直接访问声明为internal的类或类的成员。但这只局限于同一个程序集中。

internal是C#默认可访问性,就是说,如果某个类没有任何可访问性关键字在它前面的则是internal。

方法重载、隐藏域虚方法调用

子类方法与父类方法之间的关系可以概括以下三种:

1.扩充(Extend):子类方法,父类没有;

2.重载(Overload):子类有父类的同名函数,但参数类型或数目不一样;

3.完全相同:子类方法与父类方法从方法名称到参数类型完全一样。

在子类与父类中方法完全相同的情况下,调用哪个方法有对象变量的类型决定。

重写(override)与虚方法调用

    class Animal
{
public virtual void OverrideF()
{
System.Console.WriteLine("Animal OverideF");
}
}
class Lion : Animal
{
public override void OverrideF()
{
System.Console.WriteLine("Lion OverideF");
}
}
static void Main(string[] args)
{
Lion lion = new Lion();
Animal animal;
animal = lion;
animal.OverrideF();
Console.ReadKey();
}

结果为:

Lion OverideF

在animal引用不同对象是,其运用的结果可能完全不一样,因此我们在编程时只针对父类变量提供的对外接口编程,就使我们的代码成了“变色龙”,传给它不同的子类对象,就干不同的事。

这就是面向对象的“虚方法调用(Virtual Method Invoke)”特性。

面向对象语言拥有的“虚方法调用”特性,使我们可以只用同样的一个语句,在运行时根据对象类型而执行不同的操作

C#编程语言与面向对象——继承的更多相关文章

  1. Python之面向对象继承和派生

    Python之面向对象继承和派生 什么是继承: 继承是一种创建新的类的方法.在Python中,新建的类可以继承自一个或多个父类.原始类称为基类或超类. 新建的类称为派生类或子类. Python中类的继 ...

  2. OC面向对象—继承

    OC面向对象—继承 一.基本概念 程序的世界和人类的“对象”世界在思想上是没有设么区别的,富二代继承了父母,自然就拥有了父母拥有的所有资源,子类继承了父类同样就拥有了父类所有的方法和属性(成员变量). ...

  3. 面向对象继承实例(a如何继承b)

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  4. js面向对象继承

    前言 最近看到js面向对象这章节了,主要学习了原型和面向对象继承关系,为了梳理自己的知识逻辑,特此记录. js的面向对象 先说说我目前了解的js创建对象方法 1.写一个函数,然后通过new创建对象 2 ...

  5. Php面向对象 – 继承和重写

    Php面向对象 – 继承和重写 承受: php于,通过类.使用特殊的经营宗旨. 通过定义类,采用extends来表示当前的类对象继承该类的对象. 样例: class C { public  $p_c  ...

  6. Java面向对象 继承(下)

     Java面向对象   继承(下) 知识概要:               (1)抽象类 1.1 抽象类概述                            1.2 抽象类的特点       ...

  7. Java面向对象 继承(上)

       Java面向对象 继承 知识概要:         (1)继承的概述 (2)继承的特点 (3)super关键字 (4)函数覆盖 (5) 子类的实例化过程 (6) final关键字 (1)继承 ...

  8. js高级-面向对象继承

    一.工厂模式创建对象及优缺点 继承就是把公共的部分抽象出来作为父类,基类.吃饭,跑步等 var a = {}; //批量创建不方便,不能重复设置公共属性的代码 //工厂模式出现了,创建10个Cat对象 ...

  9. 面向对象 继承 抽象类 接口 static 权限修饰符

    Day01 面向对象 继承 抽象类 接口 static 1.匿名对象是指创建对象时,只有创建对象的语句,却没有把对象地址值赋值给某个变量. 2.类的继承是指在一个现有类的基础上去构建一个新的类,构建出 ...

随机推荐

  1. 在 Windows 上安装 Laravel 5.x

    由于工作中要用到 Laravel ,所以在此记录以备忘. 下载并设置 PHP 进入 http://windows.php.net/download/ 下载 PHP 5.5.x 的最新版本.如果你用的是 ...

  2. php foreach 语法的遍历来源数组如果不是一个有效数组php会出现错误警告 Invalid argument supplied for foreach()

    在php中,foreach语法的遍历来源数组如果不是一个有效数组,php会出现错误警告 Invalid argument supplied for foreach() ,但是很多时候这个数组是取自某些 ...

  3. js只保留整数,向上取整,四舍五入,向下取整等函数

    1.丢弃小数部分,保留整数部分 parseInt(5/2) 2.向上取整,有小数就整数部分加1 Math.ceil(5/2) 3.四舍五入. Math.round(5/2) 4.向下取整 Math.f ...

  4. Git ——分布式版本控制系统

    Git ——分布式版本控制系统 本人git主页地址:https://github.com/lendoon/test.git git使用心得:初次接触git在课堂上,老师给我们提供了一个代码托管的场所, ...

  5. android 开发中 添加库文件 和so 文件的存放位置和添加依赖

    so文件一般存储在  main 当中  jniLibs 当中 然后在build.gradle中添加 sourceSets { main { jniLibs.srcDirs = ['src/main/j ...

  6. Access restriction: The type TaskTopicResolver is not accessible due to restrict

    Access restriction: The type TaskTopicResolver is not accessible due to restrict :  Eclipse 默认把这些受访问 ...

  7. VMware下利用ubuntu13.04建立嵌入式开发环境之四

    二.telnet.SSH服务器安装与配置 1.telnet 1.1 安装服务器:apt-get install xinetd telnetd 1.2 安装openbsd-inetd:apt-get i ...

  8. 【iCore2 模块相关资料】iM_LAN 100M 以太网模块UDP例程

    ============================== 技术论坛:http://www.eeschool.org 博客地址:http://xiaomagee.cnblogs.com 官方网店:h ...

  9. sql转db,后台坑货

    打开 创建一个db文件然后点击文件--新建---Sqlite 导入空db成功后点击左侧栏 点击表 点击右上角+号把sql文件的语句复制粘贴到 然后点击运行,运行完成后保存ok

  10. thymeleaf的常见用法

    1,th:属性名="",就可以直接修改控件的属性,比如 <input th:type="button" th:name="xinxin" ...