为什么抽象方法没有在下面的代码中执行

本文关键字:代码 执行 在下面 抽象方法 为什么 | 更新日期: 2023-09-27 18:06:13

我粘贴下面的代码:

 abstract public class test
    {
        abstract public void add(int a, int b);
    }
    class Program : test
    {
        public void add(decimal a, decimal b)
        {
            decimal c = a + b;
            Console.WriteLine("Decimal Addition : {0}", c);
        }
        public override void add(int a, int b)
        {
            int c = a + b;
            Console.WriteLine("Addition : {0} ", c);
        }
        static void Main(string[] args)
        {
            Program obj = new Program();
            obj.add(10, 111);
            Console.ReadLine();
        }
    } 

我不能理解为什么上面的抽象类不执行?上面的代码运行完美,也产生输出。我的问题是,即使在程序类中重写抽象方法后,仍然在调用add()方法时,为什么非抽象方法正在执行而抽象方法不是?

Also如果我将程序更改为:

 abstract public class test
{
    abstract public void add(int a, int b);
}
class Program : test
{
    public void add(decimal a, decimal b)
    {
        decimal c = a + b;
        Console.WriteLine("Decimal Addition : {0}", c);
    }
    public override void add(int a, int b)
    {
        int c = a + b;
        Console.WriteLine("Addition : {0} ", c);
    }
    static void Main(string[] args)
    {
        test obj = new Program();
        obj.add(10, 111);
        Console.ReadLine();
    }
} 

然后我的抽象方法正在执行并给我期望的结果。请解释一下。下面一行实际发生了什么。我知道这个非常基本的问题,但我在这里有点困惑。请帮忙!提前谢谢。

test obj = new Program();

为什么抽象方法没有在下面的代码中执行

这是因为在派生类中声明的任何方法都比基继承方法具有更高的优先级。

如果你想调用add(int a, int b),你需要告诉编译器add(decimal a, decimal b)不存在。这是通过将其转换为test

abstract public class test
{
    abstract public void add(int a, int b);
}
class Program : test
{
    public void add(decimal a, decimal b)
    {
        decimal c = a + b;
        Console.WriteLine("Decimal Addition : {0}", c);
    }
    public override void add(int a, int b)
    {
        int c = a + b;
        Console.WriteLine("Addition : {0} ", c);
    }
    static void Main(string[] args)
    {
        test obj = new Program();
        obj.add(10, 111);
        Console.ReadLine();
    }
} 

如果你不想强制转换它,你可以在抽象类中声明add(decimal a, decimal b);。像这样:

abstract public class test
{
    abstract public void add(int a, int b);
    abstract public void add(decimal a, decimal b);
}
public class Program : test
{
    public override void add(int a, int b)
    {
        int c = a + b;
        Console.WriteLine("Addition : {0} ", c);
    }
    public override void add(decimal a, decimal b)
    {
        decimal c = a + b;
        Console.WriteLine("Decimal Addition : {0}", c);
    }
    public static void Main(string[] args)
    {
        Program obj = new Program();
        obj.add(10, 111);
        Console.ReadLine();
    }
}