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

  • 相关阅读:
    JS日期比较,使用正则表达式转换
    Using SQL*Loader to create an external table
    USACO试题beads的两种解法
    activiti5学习资料(5.12版本流程图的生成)
    黑马程序员_day20_Map集合
    开发者使用JasperReport——不同数据源之Map数据源
    给自己科谱:控制字符
    507 Jill Rides Again
    探讨工作流能给公司带来的几点益处
    ubuntu linux安装双系统的方法Win7、XP下均可
  • 原文地址:https://www.cnblogs.com/shineqiujuan/p/1353333.html
Copyright © 2011-2022 走看看