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

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

作者: Unity学习的路上 | 来源:发表于2016-12-08 19:05 被阅读0次

方法重载

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

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

 方法重载的特点:

 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(){}

}

相关文章

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

    方法重载 方法重载:构造函数就属于特殊的方法重载 方法重载:是指同一个类中相同方法的不同行为 方法重载的特点: 1...

  • 面向对象的基本原则

    基本要素: 封装 , 继承 , 多态 多态 : 注意重写和重载 重写: 子类重写父类的方法 重载: 同样的方法名 ...

  • java中实现多态的机制

    方法的重写和重载是Java多态性的不同表现. 重写Overriding是父类与子类之间多态性的一种表现 重载Ove...

  • Java重写与重载

    方法的重写和重载是java多态性的不同表现,重写是父类与子类之间多态性的一种表现,重载可以理解成多态的具体表现形式...

  • 面试必问

    方法重载 :不属于多态方法重写 :属于多态构造器: 构造器名称跟类名一样面向对象思想的三大特点:多态、封装、继...

  • 面试题(面试必答)

    方法重载 :不属于多态方法重写 :属于多态构造器: 构造器名称跟类名一样面向对象思想的三大特点:多态、封装、继承 ...

  • JVM方法调用

    方法重载和方法重写多态是面向对象程序设计的重要特性,方法重载和方法重写是Java语言实现多态的主要形式。方法重载指...

  • overload与override区别

    overload与override 方法的重写和重载是Java多态性的不同表现。重写是父类与子类之间多态性的一种表...

  • Java 学习2——Overload和Override的区别

    方法的重写(Overriding)和重载(Overloading)是Java多态性的不同表现。 重写(Overri...

  • OOP(多态,重载,重写,虚方法,密封类)

    多态 学习OOp多态*1.方法重载*2.方法重写*3.里氏替换原则**方法重载:构造函数就属于特殊的方法重载*方...

网友评论

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

      本文链接:https://www.haomeiwen.com/subject/ihvsmttx.html