new、override和终类sealed

NEW修饰符与重载

new修饰符主要用于在子类中重新定义父类中的字段或方法(同名)

用new重定义后父类方法将会被隐藏,若不想隐藏父类方法,就改个名字

 

重载时重新定义父类中已拥有的某方法,父类中方法要加virtual修饰符,而子类中重新定义的方法要加override修饰符

 

new 与override的区别

当使用override重写时

 1 public class BaseClass
 2 {
 3     public virtual void Test() => Console.WriteLine("Base");
 4 }
 5 
 6 public class MyClass : BaseClass
 7 {
 8     public override void Test() => Console.WriteLine("666");
 9 
10 }

运行下述

BaseClass baseTest = new MyClass();
baseTest.Test();

结果为 666

当使用new关键字时并运行上述时

 1 public class BaseClass
 2 {
 3     public virtual void Test() => Console.WriteLine("Base");
 4 }
 5 
 6 public class MyClass : BaseClass
 7 {
 8     public new void Test() => Console.WriteLine("666");
 9 
10 }
11 
12 //运行
13 BaseClass baseTest = new MyClass();
14 baseTest.Test();

结果为 Base

重写后用上述方法定义基类,运行为重写后方法

用new隐藏后,依然可以通过基类来访问被隐藏的方法

终类

终类为不可继承的类,用sealed修饰符表示,种类无法强行继承,否则会报错

 1     public sealed class Teacher   //sealed 定义不能继承的终类
 2         {
 3             private string name;
 4             public string Name { get=>name ; set =>name=value; }15         }
16 
17     //public class Teacher1:Teacher   //会报错并提示无法从密封类中继承
18     //    {
19 
20     //    }

 

posted @ 2018-09-21 16:57  邢韬  阅读(259)  评论(0编辑  收藏  举报