父类、接口二三事 - 相同方法继承
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(); //} }
个人理解,不对请指正!
关注细节,关注容易忽略的,开发中觉得理所当然的,但其实只是一知半解。