读书人

碰到几次这样的题了感觉对继承还是没

发布时间: 2012-05-10 16:02:39 作者: rapoo

碰到几次这样的题了,感觉对继承还是没有深入的理解,大侠请进
几道这样的题,分别输出什么结果?并且说明理由,为什么会是这样的结果,全面深入的剖析
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 是表示实例化一个对象,而且内存会分配内存给对象
其他的东西都是引用该内存对象

读书人网 >asp.net

热点推荐