class A
{ public A( ) { Console.WriteLine("A"); } }
class B:A
{ public B() { Console.WriteLine("B"); } }
class Program
{ public static void Main() {
B b = new B(); Console.ReadLine(); } }
为什么答案是A B
{ public A( ) { Console.WriteLine("A"); } }
class B:A
{ public B() { Console.WriteLine("B"); } }
class Program
{ public static void Main() {
B b = new B(); Console.ReadLine(); } }
为什么答案是A B
内存是怎么变化的
很经典的C#笔试题。
有兴趣还可以试试A a = new B();
但是 A a=new B();
父类用子类来构造,但是构造子类又要先构造父类 算是够纠结的 答案也是A B吗?
如果不明白,你可以写 { public A( ) { Console.WriteLine("A---我是个{0}", this.GetType().Name); } }
所有回复中,只有你这个是明显有错的。什么“爸爸生出儿子”?这叫做继承?假如写 { public A( ) { Console.WriteLine("A---我是个{0}", this.GetType().Name); } } 就可以看到.NET正确地实现了面向对象系统的要求,在这个它会打印出
A---我是个B
也就是说,你所谓的爸爸,其实就是儿子自己冒充的。你怎么解释这种冒冲甚至乱伦现象?唯一的解释就是,那种机械地什么“爸爸生出儿子”的观念,正是产生混乱和纠结的根源。只要避免这种误解,就能初步理解什么叫做面向对象了。
主要是要理解sp1234说的:继承不是指两个个体之间的关系,而是指一个个体有多种身份,而这些身份之间又有抽象化或者具体化的联系 这句话的含义