面向对象——密封类

简介: 面向对象——密封类

密封类


通过在类定义前面放置关键字 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();


       }


   }


}


目录
相关文章
|
27天前
|
安全 Java 编译器
Java面向对象之——多态
Java面向对象之——多态
|
1月前
面向对象编程:类、对象、继承与多态
面向对象编程:类、对象、继承与多态
17 0
|
7月前
|
存储 安全
面向对象软件设计中常见的问题 - 为什么要定义类的私有方法
面向对象软件设计中常见的问题 - 为什么要定义类的私有方法
|
9月前
|
Java
Java面向对象之多态
Java面向对象之多态
43 0
|
10月前
|
Java
Java面向对象多态
多态概述 Java 多态是指同一种类型的对象,在不同的情况下有着不同的状态和行为。它是基于继承、重写和向上转型等特性实现的,多态是面向对象编程的三大特征之一,其他两个分别是封装和继承。 Java 多态包括以下三种方式 方法重写(Override) 子类可以对从父类继承的方法进行重写,以便根据子类的需要来覆盖掉父类中的方法实现。这样在调用时,可以根据对象的不同来执行对应的方法。
52 0
|
12月前
|
编译器 C++
C++类和对象-继承&多态
C++类和对象-继承&多态
55 0
|
编译器 C++
类和对象-继承
类和对象-继承
52 1
类和对象-继承
|
编译器 C++
c++面向对象程序设计——基类和派生类(二)
c++面向对象程序设计——基类和派生类(二)
97 0