父类、接口二三事 - 相同方法继承

static class Program
    {
        /// <summary>
        /// 应用程序的主入口点。
        /// </summary>
        [STAThread]
        static void Main()
        {
            IFactory i = new Children();
            i.Voice();
            i.Listen();

            Factory f = new Children();
            f.Voice();
            f.Listen();
            Console.ReadKey();
        }
    }

    public interface IFactory
    {
        void Voice();
        void Listen();
        void Write();
    }
    public abstract class Factory
    {
        public virtual void Voice()
        {
            Console.WriteLine("factory");
        }

        public abstract void Listen();

        public abstract void Write();
    }
    public class Children : Factory,IFactory
    {
        //当继承了具有相同方法的父类和接口时,默认子类继承了父类的方法,即继承时已实现了接口的同名定义方法。不需要再次实现接口该方法了。
        //系统也会默认不再提示实现。认定已实现。且若要重新实现,只能重写父类的同名定义方法,或者new覆盖该方法。不能以接口实现的方式实现
        //该方法。因为方法已经通过父类实现。若父类同名定义的方法为抽象方法,则必须重写父类的方法。同理此时,也不用实现接口定义的方法,因为自父类继承已存在该方法。
        public override void Listen()
        {
            Console.WriteLine("listen");
        }
        public override void Write() => Console.WriteLine("write");
        //public override void Voice()
        //{
        //    base.Voice();
        //    Console.WriteLine("children");
        //}
        //public void Voice()
        //{
        //    throw new NotImplementedException();
        //}
    }

个人理解,不对请指正!

关注细节,关注容易忽略的,开发中觉得理所当然的,但其实只是一知半解。

猜你喜欢

转载自www.cnblogs.com/LL-723/p/9669144.html