当前位置: 代码迷 >> ASP.NET >> 碰到几次这样的题了,感觉对继承还是没有深入的理解,大侠请进,该怎么处理
  详细解决方案

碰到几次这样的题了,感觉对继承还是没有深入的理解,大侠请进,该怎么处理

热度:2893   发布时间:2013-02-25 00:00:00.0
碰到几次这样的题了,感觉对继承还是没有深入的理解,大侠请进
几道这样的题,分别输出什么结果?并且说明理由,为什么会是这样的结果,全面深入的剖析
1. 
C# code
    public class A    {        public void F()        {            Console.WriteLine("A.F");            Console.ReadLine();        }        public virtual void G()        {            Console.WriteLine("A.G");            Console.ReadLine();        }           }    public class B : A    {        new public void F()        {            Console.WriteLine("B.F");            Console.ReadLine();        }        public override void G()        {            Console.WriteLine("B.G");            Console.ReadLine();        }           } static void Main(string[] args)        {            B b = new B();            A a = b;            a.F();            b.F();            a.G();            b.G();}


第二题:
C# code
 public class A    {        public virtual void F()        {            Console.WriteLine("A.F");            Console.ReadLine();        }    }    public class B : A    {        public override void F()        {            Console.WriteLine("B.F");            Console.ReadLine();        }    }    public class C : B    {        new public virtual void F()        {            Console.WriteLine("C.F");            Console.ReadLine();        }    }    public class D : C    {        public override void F()        {            Console.WriteLine("D.F");            Console.ReadLine();        }    }static void Main(string[] args)        {            D d = new D();            A a = d;            B b = d;            C c = d;            a.F();            b.F();            c.F();            d.F();}


还有一些更复杂的,涉及到接口的了,把一个对象强转为接口类行等等,郁闷了

------解决方案--------------------------------------------------------
C# code
 static void Main(string[] args)        {            B b = new B();            A a = b;            a.F();            b.F();            a.G();            b.G();}
------解决方案--------------------------------------------------------
C# code
new 是表示实例化一个对象,而且内存会分配内存给对象其他的东西都是引用该内存对象
------解决方案--------------------------------------------------------
1.方法定义了virtual,用的时候和正常方法一样,子类继承,没有重写的话,也和平常方法一样
2.子类继承重写之后,如果没用调用base.XXX()就完全按重写后内容
3.子类重写并且调用了base.XXX()就会在相应地方掉父类方法
------解决方案--------------------------------------------------------
探讨

C# code

new 是表示实例化一个对象,而且内存会分配内存给对象
其他的东西都是引用该内存对象
  相关解决方案