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,实际是将子类强制性转换成了父类。

 A();
            a.Fun2(b);
            b.Fun2(a);
            Console.ReadKey();
        }
    }

 

这道题输出:2 5 1 6

相关文章:

  • 2022-12-23
  • 2021-10-01
  • 2022-01-09
  • 2021-11-01
  • 2022-12-23
  • 2021-08-30
  • 2021-05-22
  • 2021-09-28
猜你喜欢
  • 2021-07-05
  • 2021-11-10
  • 2021-12-31
  • 2021-10-07
  • 2022-02-06
  • 2022-01-26
相关资源
相似解决方案