zoukankan      html  css  js  c++  java
  • 关于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相当于一个断点,截断了继承流。

  • 相关阅读:
    第二十一章流 1流的操作 简单
    第二十章友元类与嵌套类 1友元类 简单
    第十九章 19 利用私有继承来实现代码重用 简单
    第二十章友元类与嵌套类 2嵌套类 简单
    第十九章 8链表类Node 简单
    第二十一章流 3用cin输入 简单
    第十九章 10 图书 药品管理系统 简单
    第十九章 11图书 药品管理系统 简单
    第二十一章流 4文件的输入和输出 简单
    第十九章 12 什么时候使用私有继承,什么时候使用包含 简单
  • 原文地址:https://www.cnblogs.com/Dukechris/p/4380085.html
Copyright © 2011-2022 走看看