关于C#中一些关于Inheritance和Polymorphism的事情……

  在面向对象的语言中,继承和多态是十分重要的两个特征。目前,C#和Java均为单继承多接口语言,能够有效利用面向对象的特征进行编程。其中继承是一个将类具体化的过程,继承深度越高,类就越具体。多态则是用不同的具体化方法实现同一种功能的接口,让父类具有子类的特征。同时多态可以实现代码的复用。

  1. virtual方法

    virtual方法定义基类中的虚函数,这种函数可以被子类继承,并在子类中被override成具有子类特性的新函数。比如:

        public virtual int sum(){}   //……在基类中

public override int sum(){}    //……在子类中

注意,C#中的override关键字,在子类中覆盖函数,此时基类改变此函数,子类并不会发生变化,起到了保护的作用。

2. new修饰符

和override比较,new可以显示地隐藏从基类继承的成员函数。虽然都是使用子类自己的函数,但是new会隐藏掉、截断掉基类的函数,而override则会扩展基类函数的功能。下面看一个例子:

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6
 7 namespace ConsoleApplication1
 8 {
 9     class Program
10     {
11         static void Main(string[] args)
12         {
13             A objA = new D();
14             A objB = new B();
15             C objC = new D();
16             A objD = new A();
17             objA.Movie();
18             objB.Movie();
19             objC.Movie();
20             objD.Movie();
21
22         }
23             class A {
24                 public virtual void Movie() {
25                 Console.WriteLine("MikiMouse");
26                           }
27                      }
28             class B : A {
29                 public override void Movie () {
30                 Console.WriteLine("DisneyMovie");
31                          }
32                      }
33
34         class C : B {
35                 public new virtual void Movie () {
36                 Console.WriteLine("Snow White");
37                         }
38                      }
39        class D : C {
40                 public override void Movie () {
41                 Console.WriteLine("Seven Dwarfs ");
42                         }
43                      }
44
45     }
46 }

其输出结果是:

简而言之,new virtual相当于一个断点,截断了继承流。

时间: 2024-10-30 13:35:43

关于C#中一些关于Inheritance和Polymorphism的事情……的相关文章

【《Objective-C基础教程 》笔记ch04】(五)OC中的继承inheritance机制

一.为什么需要继承 使用继承一方面继承了父类的特性,另一方便解决了重复代码维护问题. 二.继承之语法 1. @interface 子类名:父类名 2. OC只支持单继承,不支持继承多个父类. 3. 重构--移植和优化代码. 三. 继承的工作机制 1. 方法调度 子类拥有一个指向它父类的引用指针,消息传递时,OC的方法调度机制使用该信息来找到正确的实现方法,查找过程是现在子类中找,找不到再到父类中继续找. 2. 实例变量 1)继承实例源码 @interface Shape : NSObject {

生活中经常会遇到很多麻烦的事情

我们在生活中经常会遇到很多麻烦的事情,不要以为遇到麻烦就很倒霉,其实遇到麻烦,你不是要想办法解决吗?当你解决的时候不管你是解决了或者没有解决,你从中都可以获取经验,你得到了成长,所以我们遇到麻烦的时候一定不要去抱怨,要有平常心态跟乐观心态去对待,难道你不知道塞翁失马是一件好事吗?所以当遇到麻烦的时候千万不要抱怨,是你成长的开始. 当我们遇到问题的时候,很多人都不知道如何去解决,如何去处理,因为这些事情可能是你第一次遇到,没有经验,或者你的能力有限,所谓书到用时方恨少,我们平时一定要多学习,俗话说

【 python 学习笔记 -- OOP】在实例中学习继承(inheritance)和组合(composition)

[面向对象的三大特征]: [封装(encapsulation)]: 通过抽象的类把数据和方法封装起来.实例的数据只能通过public interface(即实例的方法)来获取或操作. [优点]:1. 功能只需在一个地方定义,而不需要在很多地方重复定义 2. 保证对象内部的数据的安全性 3. 当我们想要使用一个方法的时候,我们只需要知道我们用这个方法会返回什么结果,而不需要知道内部到底做了哪些操作来实现的.  就好像我们看电视时想要换频道,只需要按几个按钮,不需要知道要怎么调频. [继承  (in

Programming C#.Inheritance and Polymorphism

继承 C#中,创建派生类要在派生类的名字后面加上冒号,后面再跟上基类的名字: 1 public class ListBox : Control 提示:C++程序员注意了,C#没有私有或者保护继承 多态 继承又两个功能强大的方面.其一是代码重用,创建ListBox类时,可以重用基类Control中的某些逻辑.另一方面就是多态性. 举一个多态的例子: 当电话公司向某个电话发送一个响铃信号时,它并不知道电话线另一头是什么类型的电话.也许是老式的手摇电话,要自己生电响铃,也许是可以演奏数字音乐的电子电话

深入Java核心 Java中多态的实现机制(1)

多态性是Java面向对象的一个重要机制,本文将向您详细介绍Java语言中多态性的实现原理和方法,通过多态一点带出更多Java面向对象有趣而实用的知识. 多态性是面向对象程序设计代码重用的一个重要机制,我们曾不只一次的提到Java多态性.在Java运行时多态性:继承和接口的实现一文中,我们曾详细介绍了Java实现运行时多态性的动态方法调度:今天我们再次深入Java核心,一起学习Java中多态性的实现. “polymorphism(多态)”一词来自希腊语,意为“多种形式”.多数Java程序员把多态看

Android Multimedia框架总结(六)C++中MediaPlayer的C/S架构

http://blog.csdn.net/hejjunlin/article/details/52435789 前面几节中,都是通过java层调用到jni中,jni向下到c++层并未介绍 看下Java层一个方法在c++层 MediaPlayer后续过程 frameworks/av/media/libmedia/MediaPlayer.cpp 找一个我们之前熟悉的setDataResource方法看下C/S模式的过程,亦可参考Android Multimedia框架总结(四)MediaPlayer

java中实现多态的机制是什么?

多态性是面向对象程序设计代码重用的一个重要机制,我们曾不只一次的提到Java多态性.在Java运行时多态性:继承和接口的实现一文中,我们曾详细介绍了Java实现运行时多态性的动态方法调度:今天我们再次深入Java核心,一起学习Java中多态性的实现. “polymorphism(多态)”一词来自希腊语,意为“多种形式”.多数Java程序员把多态看作对象的一种能力,使其能调用正确的方法版本.尽管如此,这种面向实现的观点导致了多态的神奇功能,胜于仅仅把多态看成纯粹的概念. Java中的多态总是子类型

多态(Polymorphism)

C++里多态的概念有点乱,有时间上Wikipedia上搜索了下相关词条,总结如下: Polymorphism(computer science) 在编程语言和类型理论中,Polymorphism(希腊语,意思为many shape)指的是单个接口对应多个类型实体.作为一个多态类型,它的操作(operation)也可以被提供给其他类型的value.存在几种完全不同类型的多态. 1.Ad hoc polymorphism:函数能够依据参数类型指定不同的实现(depending on a limite

沉默的中国运营商

早在十年前,电信运营商无疑是中国最具审美性的企业,中国移动的工资高,专家常常公布其一分钟的收入,以重重地刺激私企的上班狗们,大街上到处都是动感地带的广告牌,周杰伦那首<我的地盘我做主>也成了永恒的经典.在功能机时代,消费者没有太多选择,只能不断研究各种套餐,比如短信数量.单向免费.甚至两城一家都能成为大家讨论的话题,有些段子手常常能围绕移动.联通编辑出各种各样的经典段子- 随着移动互联网的发展,中国彻底进入了"大通信"时代,但作为基础通信设施提供者的运营商却越来越沉默,他们