日期:2014-05-17  浏览次数:21189 次

C#三重继承的问题
定义一个抽象类
abstract class A1
{
protected abstract void method();
}

实现这个抽象类:
class A2:A1
{
protected override void method()
{

}
}
再修改A2的方法:
class A3:A2
{
//这里已经不能再override或什么了
protected void method()
{
}
}

然后 A a2 = new A2();
A a3 = new A3();
a3.method()调用的是A2的method,没有调用自己的method.
请教问题出在什么地方?


------解决方案--------------------
C# code
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{

    abstract class A1
    {
        public abstract void method();
    }


    class A2 : A1
    {
        public override void method()
        {
            Console.WriteLine("a2");
        }
    }

    class A3 : A2
    {
        //这里已经不能再override或什么了
        public override void method()
        {
            Console.WriteLine("a3");
        }
    }


    class Program
    {
        static void Main(string[] args)
        {
            A1 a2 = new A2();
            a2.method();
            A1 a3 = new A3();
            a3.method();
        }
    }
}

------解决方案--------------------
怎么可能呢,只是vs没提示让你重载而已,因为父类已经实现了