C#多态的表现-方法重载,方法重写以及密封类的特点

方法重载

方法重载:构造函数就属于特殊的方法重载

 方法重载:是指同一个类中相同方法的不同行为

 方法重载的特点:

 1.方法名必须相同

 2.参数列表必须不相同(这里的不相同是指参数类型,参数个数以及参数顺序

 3.在有相同参数列表个数的前提下,函数方法返回值不作为判断方法是否重载的依据


class Math

{

public  int sum(int a,int b)

{

return a + b;

}

public float sum(int a, float b)

{

return a + b;

}

public float sum(float a, float b)

{

return a + b;

}

public float sum(float a, int b)//不同参数类型的顺序也可以作为方法重载的依据

{

return a + b;

}

}

在调用这些方法时,只要将参数写成那种方法的参数列表就可以了



方法的重写

 方法的重写:是指在继承关系中不同类之间的比较和研究

 第一个关键字:virtual(虚拟的)

 用virtual修饰的方法称之为虚方法

 virtual一般情况下和override成对出现

 如果子类重写了override,则父类必须拥有virtual修饰的方法

 反过来则不一定成立,因为我们还有方法覆盖


第二个关键字:override(重写)

 为什么要使用方法重写呢

 1.使用虚方法其实就是对目前的程序不满意,暂时方法功能是实现了的,但是不够完美,希望后面的程序员通过重写父类方法的方式,进行功能上的优化

 2.可以通过继承系统提供的类,去修改系统类中提供的虚方法


 方法重写需要注意的地方

 1.不能重写父类中有sealed修饰的方法

 2.不能重写父类中用static修饰的方法

 3.如果父类中存在abstract方法,子类必须重写



class Animal//动物类有一个行为(方法)就是叫

{

public virtual void jiao()//使用虚方法实现叫这个方法,但是这个方法不够完美,需要子类去调用重写

{

Console.WriteLine ("叫");

}

}

class Cat:Animal//子类继承父类

{

public override void jiao()//子类重写父类方法

{

Console.WriteLine ("猫叫");

}

}

class Laohu:Animal

{

public override void jiao()//子类重写父类方法

{

Console.WriteLine ("老虎叫");

}

}

class Lion:Animal

{

public override void jiao()//子类重写父类方法

{

Console.WriteLine ("狮子叫");

}

}

这就体现了面向对象中多态。


密封类


 密封类:俗称断子绝孙类....

 如果我们的类是密封类,那么就意味着不能有任何派生类,但是密封类可以拥有父类

 C#中密封类用sealed关键字,sealed可以将类或者方法声明为密封类或者密封方法,

 对于密封类来说,不能继承该密封类。

 对于密封类来说,不能重写该密封方法

 密封类不能使用protected,访问修饰符

 密封类不能使用virtual

 密封类的不可继承性,所以密封类不能声明为抽象的,即sealed关键字不能和abstract共同使用


 如果用sealed修饰方法,必须要遵循一个条件:这个类要有父类,并且重写了父类的某一个虚方法才可以用sealed修饰,否则是绝对不行

密封类的作用就是防止外界修改到本类,破坏类的内部构造。


class A//创建父类A

{

public virtual void SayHi(){}//父类A中有虚方法

}

sealed class B:A//父类满足有虚方法这个条件,可以用sealed修饰

{

public override void SayHi (){}//重写了父类的虚方法

}

class C:A

{

public sealed override void SayHi (){}

}

class E:C

{

public override void SayHi (){}//这样的写法是错误的,因为在C类中这个方法是用sealed修饰的,是密封方法所以无法被重写,编译不能通过

}

class D:A//其他类继承A这个父类与B这个密封类没有关系

{

public override void SayHi(){}

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,881评论 18 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,759评论 18 399
  • 1. [C#语言基础]请简述拆箱和装箱。 答: 装箱操作: 值类型隐式转换为object类型或由此值类型实现的任何...
    胤醚貔貅阅读 4,880评论 1 29
  • 阳光正好 何人在远方
    J木习阅读 148评论 0 0
  • 今天凌晨零点上淘宝买东西,七点起来去做饭,中午也没睡觉,真的感觉太困了~
    柳叶棒棒糖阅读 202评论 1 1