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