zoukankan      html  css  js  c++  java
  • 简单的多态程序

    Code
    using System;
    using System.Collections.Generic;
    using System.Text;

    namespace VirtualDemo
    {
        
    class A
        {
            
    public void F() { Console.WriteLine("A.F"); }
            
    public virtual void G() { Console.WriteLine("A.G"); }
        }
        
    class B : A
        {
            
    new public void F() { Console.WriteLine("B.F"); }
            
    public override void G() { Console.WriteLine("B.G"); }
        }
        
    class Test
        {
            
    static void Main()
            {
                B b 
    = new B();
                A a 
    = b;
                a.F();
                b.F();
                a.G();
                b.G();
            }
        }

    }

    输出结果:

    A.F

    B.F

    B.G

    B.G

    (疑惑之处:A a=b这个过程,在堆栈上的地址是怎么指向堆的呢,我们经常用抽象类做父类,来引用子类。内存是怎么一个分配过程呢)

    ------

    懂了,其实也可以看成是调用的B的方法,因为B继承了A里面所有的方法。如果重写了就是调用B的,很简单的问题,却让自己给想复杂了。呵呵,

    使用 new 关键字时,调用的是新的类成员而不是已被替换的基类成员。这些基类成员称为隐藏成员。如果将派生类的实例强制转换为基类的实例,就仍然可以调用隐藏类成员。例如:本例子中:A a=b,实际是将子类强制性转换成了父类。

    Code
    public class A
        {
            
    public virtual void Fun1(int i)
            {
                Console.WriteLine(i);
            }

            
    public void Fun2(A a)
            {
                a.Fun1(
    1);
                Fun1(
    5);
            }
        }


        
    public class B : A
        {
            
    public override void Fun1(int i)
            {
                
    base.Fun1(i + 1);
            }

            
    public static void Main()
            {
                B b 
    = new B();
                A a 
    = new A();
                a.Fun2(b);
                b.Fun2(a);
                Console.ReadKey();
            }
        }

    这道题输出:2 5 1 6

  • 相关阅读:
    Hznu_0j 1533 计算球体积(水)
    电子警察
    UVA ——利用常量数组
    排序算法
    分解质因数
    几种数
    动态规划
    C. The Football Season (枚举) ( Codeforces Round #592 (Div. 2) )
    Fibonacci前n项和 (矩阵乘)
    2153: D.ly的排队问题 (拓扑排序)(vector , set , priority_queue )
  • 原文地址:https://www.cnblogs.com/shineqiujuan/p/1353333.html
Copyright © 2011-2022 走看看