• 简单的多态程序


    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

  • 相关阅读:
    C语言 atoi
    C语言 strtok
    C语言 strstr
    Python从菜鸟到高手(6):获取用户输入、函数与注释
    Python从菜鸟到高手(5):数字
    Python从菜鸟到高手(3):声明变量
    Python从菜鸟到高手(2):清空Python控制台
    Python从菜鸟到高手(1):初识Python
    《Python从菜鸟到高手》已经出版,开始连载了,购买送视频课程
    Python从菜鸟到高手(1):数字的奥秘
  • 原文地址:https://www.cnblogs.com/shineqiujuan/p/1353333.html
Copyright © 2020-2023  润新知