zoukankan      html  css  js  c++  java
  • 密封类与密封方法

            密封类就是将一个类封闭起来,断其子孙的一种方式。书面点说,就是从所修饰的类派生出其他类,所以一个密封类是没有也不能继承的类,因此sealed关键字和abstract关键字不能同时使用。

           密封方法则不是为了防止继承而是防止重写,而且它是为了重写基类的虚方法并提供具体的实现,同时防止其后继类(派生类)再次重写该虚方法因此在密封方法中sealed关键字总是和override关键字同时使用。

    这些都很简单但是代码总结起来还是不够直观,必须实际感受下:

     1 using System;
    2
    3 namespace SealClassTest
    4 {
    5 public sealed class SealClass
    6 {
    7 public static void F()
    8 {
    9 Console.WriteLine("SealClass.F()");
    10 }
    11 }
    12 /* public class TestSeal : SealClass
    13 * { }
    14 * error,The compiler's IntelliSense
    15 * will not prompt "SealClass",Here just to test */
    16 class A
    17 {
    18 public virtual void F()
    19 {
    20 Console.WriteLine("A.F()");
    21 }
    22 public virtual void G()
    23 {
    24 Console.WriteLine("A.G()");
    25 }
    26 }
    27 class B : A
    28 {
    29 sealed public override void F()
    30 {
    31 Console.WriteLine("B.F()");
    32 }
    33 public override void G()
    34 {
    35 Console.WriteLine("B.G()");
    36 }
    37 }
    38 class C : B
    39 {
    40 public override void G()
    41 {
    42 Console.WriteLine("C.G()");
    43 }
    44 /*
    45 * error :
    46 public override void F()
    47 {
    48 base.F();
    49 }*/
    50 }
    51
    52 class Test
    53 {
    54 public static void Main()
    55 {
    56 C c = new C();
    57 B b = c;
    58 A a=new A();
    59 b.F();
    60 a.F();
    61 c.F();
    62 Console.ReadKey();
    63 }
    64 }
    65 }

     
  • 相关阅读:
    JavaFx在macOS下的文字渲染Bug
    Java多接口同名方法的冲突
    旧技术的惯性
    一点思考(1)
    slisp:编译到JVM平台上的lisp方言
    Arcee:又一个 Parser Generator 轮子
    使用Java实现一门简单的动态语言
    Hello World!
    [NOI2008]奥运物流
    [IOI2005]Riv河流
  • 原文地址:https://www.cnblogs.com/rohelm/p/2384114.html
Copyright © 2011-2022 走看看