现实生活中的事物都归属于一定的类别,比如,狮子是一种(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. jsp页面往mysql里插入中文后数据库里显示乱码

    1.JSP页面乱码 这种乱码的原因是应为没有在页面里指定使用的字符集编码,解决方法:只要在页面开始地方用下面代码指定字符集编码即可,<%@ page contentType="text ...

  2. code of C/C++(3) - 从 《Accelerated C++》源码学习句柄类

    0  C++中多态的概念 多态是指通过基类的指针或者引用,利用虚函数机制,在运行时确定对象的类型,并且确定程序的编程策略,这是OOP思想的核心之一.多态使得一个对象具有多个对象的属性.class Co ...

  3. gitt

    一,git config core.autocrlf false 二,vi .git/config[remote "origin"] url = https://github.co ...

  4. 一个简单的金额平均分配函数(C#版)

    //总金额平均分配给总人数 //参数说明:总金额,总人数,最大金额为平均金额的倍率 public double[] GetList(double zje,int zrs,int max) { doub ...

  5. 鼠标滚动div固定浮动-加锚点

    页面:    <div class="pa">        <div class="w-95-sl bdl-2"><a>标 ...

  6. Pressure-sensitive pores scattered

    Some researchers take issue with this however - a shark's vision is too good and its sense of smell ...

  7. 程序内部让用户直接上appstore评价游戏的链接地址以及跳转方法

    NSString *str = [NSString stringWithFormat:@"itms-apps://ax.itunes.apple.com/WebObjects/MZStore ...

  8. a链接的四种状态

    四种状态:hover.link.active.visible a:link{color:#fff;} a链接初始化 a:hover{color:yellow;} 把鼠标放上去的状况 a:active{ ...

  9. MVC 实体字段自定义验证

    [Remote("ActionName", "ControllerName", AdditionalFields = "ID", Error ...

  10. ldap + kerberos + google authentication 实现两步验证

    第一步:ldap + kerberos 整合  ,参考之前的文章 第二步:google authentication 安装配置,参考之前的文章 第三步:整合 ldap + kerberos + goo ...