面向对象——密封类
密封类
通过在类定义前面放置关键字 sealed,可以将类声明为密封类。例如:
public sealed class D
{
// Class members here.
}
密封类不能用作基类。因此,它也不能是抽象类。密封类禁止派生。
由于密封类从不用作基类,所以有些运行时优化可以使对密封类成员的调用略快。
重写基类虚成员的派生类成员,如方法、字段、属性或事件,可被声明为密封成员。
在后续的派生类中,这将取消该成员的虚效果。方法是在类成员声明中将 sealed 关键字置于 override 关键字的前面。例如:
public class D : C
{
public sealed override void DoWork() { }
}
特点:(1) 使用sealed关键字来定义密封类。
(2) 密封类不能被继承。
(3) 在密封类不能定义虚函数,不能定义抽象函数。
(4) 可以使用sealed关键字来密封方法,但是只有在覆盖基类的方法时才能使用sealed关键字。
(5) 使用sealed关键字密封的方法不能被覆盖,防止派生类进一步重写该方法,但能被重载,能被隐藏。
(6) 注意:在使用sealed关键字时,不能同时使用abstract或virtual关键字。
使用密封类注意一下几点: 1、密封类不能作为基类被继承,但它可以继承别的类或接口。
2、在密封类中不能声明受保护成员或虚方法,因为受保护成员和只能从派生类进行访问,而虚成员只能在派生类中重写。
3、由于密封类的不可继承性,因此密封类不能声明抽象的。
示例:
using System;
using System.Collections.Generic;
using System.Text;
namespace TestSealedClass_01
{ // 密封类 不能被继承
sealed class A
{
public void Method1()
{}
//错误,在密封类中不能定义虚函数
//public virtual void Method2()
//{}
//错误,在密封类中不能定义抽象函数
//public abstract void Method3();
}
//class B : A //错误,密封类A不能被继承
//{}
class AutoMobile
{
public virtual void Display()
{
Console.WriteLine("这是基类 AutoMobile");
}
//Display()方法不是重写,所以不能使用sealed关键字
//public sealed void Display()
//{
// Console.WriteLine("这是基类 AutoMobile");
//}
}
class Car : AutoMobile
{
//使用sealed关键字来密封方法
public sealed override void Display()
{
Console.WriteLine("这是派生类 Car");
}
public void Display(string mark) //使用sealed关键字密封的方法,能被重载
{
Console.WriteLine("这是派生类 Car:{0}", mark);
}
}
class SmallCar : Car
{
//使用sealde关键字密封的方法,不能被覆盖
//public override void Display()
//{}
//使用sealde关键字密封的方法,能被隐藏
public new void Display()
{ Console.WriteLine("这是派生类 Car"); }
}
class Program
{
static void Main(string[] args)
{
Car car = new Car();
car.Display();
}
}
}
相关文章
- Java面向对象之创建和使用对象——定义学生/教师类并输出相关信息
- Java面向对象三大特性(封装、继承、多态)
- java面向对象三大特征
- 领悟面向对象就离开发应用不远了(类提高)有你对面向对象的所有疑问,爆肝1w字
- 【Ruby高级技术】对面向对象里的控制访问,包括类的继承类常量的深入理解和使用
- 面向对象设计模式--单例模式详解+实际应用(Java)
- java面向对象(4)详解编程语言
- JavaScript的面向对象方法以及差别
- JS面向对象的5钟写法
- js面向对象设计用{}好还是function(){}好(构造函数)
- JS左右无缝滚动(一般方法+面向对象方法)
- PHP的异常处理、错误的抛出及回调函数等面向对象的错误处理方法
- js一般方法改写成面向对象方法的无限级折叠菜单示例代码
- js面向对象之静态方法和静态属性实例分析