1. 密封类 即不希望类被继承,无派生类。
密封方法 即不允许被重载的方法。
2. 密封方法 所在的类 不一定是密封类 (和抽象方法不同) , 该类的派生类中必须原封不动的继承这个密封方法.
密封方法本身也是个重载方法, 即 必须 sealed 和 override 都要有.
3. 密封方法不能被重载(override), 但可以被覆盖(new).
using System; using System.Collections.Generic; using System.Text; namespace ConsoleApp { class sealedSample { public static void Main() { A a = new A1(); a.Output(); a = new A2(); a.Output(); a = new A1_1(); a.Output(); a = new A1_2(); a.Output(); Console.Read(); } } //抽象类 public abstract class A { //抽象方法 public abstract void Output(); } //派生 实现 public class A1 : A { //重写基类A的Output(), 并且设为 密封方法! public sealed override void Output() { Console.WriteLine("A1"); } //// X 密封方法必须有override! //public sealed void Output() //{ // Console.WriteLine("A1"); //} } //定义密封类 A2 public sealed class A2 : A { public override void Output() { Console.WriteLine("A2"); } } public class A1_1 : A1 { //继承其父类(A1)的 Output() } public class A1_2 : A1 { // X 不能重写 sealed方法, 只能 覆盖 new方法 //public override void Output() //{ // Console.WriteLine("A1_2"); //} public new void Output() { Console.WriteLine("A1_2"); } } }
结果:
A1
A2
A1
A1