黑马程序员-多态

---------------------- ASP.Net+Android+IOS开发 .Net培训 、期待与您交流! ----------------------



多态就是对象可以表现多个类型的能力

当子类从父类继承时,它会获得父类的所有方法、字段、属性和事件。C#语言使用虚方法表达多态。若要更改父类的属性和方法,可以有两种方法:

第一种:可以使用新的子类成员替换父类成员

第二种:可以重写虚拟的父类成员。
使用新的子类成员替换父类的成员需要使用 new 关键字。如果父类定义了一个方法、字段或属性,则new 关键字用于在子类中创建该方法、字段或属性的新定义。new 关键字放置在要替换的类成员的返回类型之前。例如:

(为了书写方便,类中的字段就使用public修饰,省去属性的书写)

class Person

 {

 public void SayHello()

 {

      Console.WriteLine(“大家好,我是人”)

 }

 public string name;

 public int  age;
}

class Teacher :Person

{

public new void SayHello()

 {

      Console.WriteLine(“大家好,我是教师”)

 }

public string name;
public  int age;

}

使用 new 关键字时,调用的是子类成员而不是已被替换的父类成员。这些父类成员已被new关键字隐藏

为了使子类的实例完全接替来自父类的类成员,父类必须将该成员声明为虚拟的。这是通过在该成员的返回类型之前添加 virtual 关键字来实现的。然后,子类可以使用 override 关键字而不是 new

例如:

class Person

 {

 public virtual  void SayHello()

 {

      Console.WriteLine(“大家好,我是人”)

 }

 public string name;

 public int  age;
}

class Teacher :Person

{

public override void SayHello()

 {

      Console.WriteLine(“大家好,我是教师”)

 }

public  string name;
public  int age;

}

虚方法与重写

方法不能用static修饰

方法重写与基类的签名必须一致(重写的时候方法名和参数都要一致)

virtual不能与private一起使用

重写override与重载overload的区别

      重载是方法的名称相同,参数或参数类型不同,进行多次重载以适应不同的需要。重载是面向过程的概念

     重写是进行基类中函数的重写,override是面向对象的概念

重写和重载不一样,要区分开

抽象类和抽象方法:

如果一个类中有一个方法加上了abstract(放在访问修饰符后面),那么这个方法就叫抽象方法,而且抽象方法没有方法体;同时那么这个方法所在的类也必须要用abstract来修饰,那么这个类就变成了抽象类

抽象类不能被实例化

如果一个类继承了抽象类,那么这个类中的方法必须重写父类的抽象方法

Abstract使用注意:

1.    抽象方法没有方法体

2.    抽象成员只能存在于抽象类中

3.    抽象类可以有非抽象成员

4.    抽象类的派生类必须实现抽象方法体

5.    抽象类只能用作基类,无法实例化

虚方法和抽象方法比较

虚方法

抽象方法

virtual修饰

abstract修饰

要有方法体

不允许有方法体

可以被子类override

必须被子类override

除了密封类都可以写

只能在抽象类中

 


---------------------- ASP.Net+Android+IOS开发.Net培训、期待与您交流! ----------------------
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值