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相当于一个断点,截断了继承流。

  • 相关阅读:
    宿主机无法访问CentOS7上Jenkins服务的解决办法
    415. Add Strings
    367. Valid Perfect Square
    326. Power of Three
    258. Add Digits
    231. Power of Two
    204. Count Primes
    202. Happy Number
    172. Factorial Trailing Zeroes
    171. Excel Sheet Column Number
  • 原文地址:https://www.cnblogs.com/Dukechris/p/4380085.html
Copyright © 2011-2022 走看看