sealed:
adj. 密封的;未知的
v. 封闭;盖印(seal的过去分词)
被sealed修的类:密封类
修饰的方法: 密封方法
密封类:可以继承其他类,不可以被其他类继承
密封方法: 密封方法,在派生类中该方法不可以重写
密封类不可以被继承,那么密封类中不可以有虚方法和抽象方法。
1 namespace 密封类 2 { 3 class Program 4 { 5 static void Main(string[] args) 6 { 7 } 8 } 9 10 //密封类:不能够被继承,可以继承别人 sealed 11 class Person 12 { 13 14 } 15 sealed class Man:Person //密封类可以继承别人 16 { 17 18 } 19 class Student //:Man 不能继承密封类 20 { 21 22 } 23 }
sealed: 密封方法后必须由override,也就说密封方法必须先是重写父类的方法,重写, 然后才能变成密封方法
1 class Person 2 { 3 public virtual void Run() 4 { 5 6 } 7 } 8 class Man:Person //密封类可以继承别人 9 { 10 public sealed void Run() 11 { 12 13 } 14 }
密封方法:派生类中不可以重写密封方法,子类可以继承到密封类
1 class Man:Person //密封类可以继承别人 2 { 3 public sealed override void Run() 4 { 5 Console.WriteLine("man"); 6 } 7 } 8 class Student :Man 9 { 10 public override void Run() 11 { 12 Console.WriteLine("student"); 13 } 14 }
但是可以隐藏掉父类的方法:new
1 class Person 2 { 3 public virtual void Run() 4 { 5 6 } 7 } 8 class Man:Person //密封类可以继承别人 9 { 10 public sealed override void Run() 11 { 12 Console.WriteLine("man"); 13 } 14 } 15 class Student :Man 16 { 17 public new void Run() 18 { 19 Console.WriteLine("student"); 20 } 21 }
子类可以继承到密封类
1 namespace 密封类 2 { 3 class Program 4 { 5 static void Main(string[] args) 6 { 7 //输出结果都是man,可以密封方法可以被子类继承到 8 Student s = new Student(); 9 s.Run(); 10 11 Man m = new Student(); 12 m.Run(); 13 14 Console.ReadKey(); 15 } 16 } 17 18 //密封类:不能够被继承,可以继承别人 sealed 19 class Person 20 { 21 public virtual void Run() 22 { 23 24 } 25 } 26 class Man:Person //密封类可以继承别人 27 { 28 public sealed override void Run() 29 { 30 Console.WriteLine("man"); 31 } 32 } 33 class Student :Man 34 { 35 } 36 }
在标记密封类或密封方法要慎重。