为什么抽象方法没有在下面的代码中执行?
Why the abstract method is not executing in the following code?
我正在粘贴以下代码:
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();
}
}
我无法理解为什么上面的摘要 class 没有执行?
上面的代码运行完美,也产生了输出。
我的问题是即使在重写程序中的抽象方法后 class 仍然在调用 add() 方法时为什么非抽象方法正在执行而抽象方法不是?
此外,如果我将程序更改为:
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();
那是因为在 derive class 中声明的任何方法都比基继承方法具有更高的优先级。
如果你想调用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);
到抽象class中。
像这样:
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();
}
}
我正在粘贴以下代码:
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();
}
}
我无法理解为什么上面的摘要 class 没有执行? 上面的代码运行完美,也产生了输出。 我的问题是即使在重写程序中的抽象方法后 class 仍然在调用 add() 方法时为什么非抽象方法正在执行而抽象方法不是?
此外,如果我将程序更改为:
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();
那是因为在 derive class 中声明的任何方法都比基继承方法具有更高的优先级。
如果你想调用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);
到抽象class中。
像这样:
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();
}
}