代码之家  ›  专栏  ›  技术社区  ›  Waleed Naveed

子类调用自己的方法,而不是基类/父类方法

  •  -1
  • Waleed Naveed  · 技术社区  · 3 年前
    using System;
    public class Program
    {
        class A
        {
            public void abc(int q)
            {
                Console.WriteLine("abc from A");
            }
        }
    
        class B : A
        {
            public void abc(double p)
            {
                Console.WriteLine("abc from B");
            }
        }
    
        public static void Main(string[] args)
        {
            int i = 5;
            B b = new B();
            b.abc(i);
            Console.ReadLine();
        }
    }
    

    当我运行上面的代码时,我得到了输出 abc from B .由于B类是从A类继承而来的,所以不应该调用A类的abc方法吗?

    我更新了代码,更新的代码是:

    using System;
    public class Program
    {
        class A
        {
            public void abc(int q)
            {
                Console.WriteLine("abc from A");
            }
        }
    
        class B : A
        {
        }
    
        public static void Main(string[] args)
        {
            int i = 5;
            B b = new B();
            b.abc(i);
            Console.ReadLine();
        }
    }
    

    现在,当我运行代码时,我得到了输出 abc from A 这完全有道理,因为B类继承自A类。

    另一种情况下,更新的代码是:

    using System;
    public class Program
    {
        class A
        {
            public void abc(int q)
            {
                Console.WriteLine("abc from A");
            }
        }
    
        class B : A
        {
            public void abc(double p)
            {
                Console.WriteLine("abc from B");
            }
        }
    
        public static void Main(string[] args)
        {
            int i = 5;
            A b = new B();
            b.abc(i);
            Console.ReadLine();
        }
    }
    

    现在,当我运行代码时,我得到了输出 来自A的abc .第二个和第三个案例对我来说完全有意义。有人能解释一下第一个案例的结果吗。

    0 回复  |  直到 3 年前