---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------
多态
多态就是对象可以表现多个类型的能力,比如说类,子类可以有父类的方法, 也可以重写父类的方法等,有多种能力。
类的多态表现为,子类可以有与父类方法名相同的方法,子类可以重写父类的方法
如果子类和父类的方法重名了,编译的时候会报警告也就是报绿线,如何把绿线干掉呢?
第一种方法:我们可以在子类方法的访问修饰符后面加new。
第二种方法:我们可以在父类的方法上加一个virtual修饰,然后子类在继承父类的时候,可以用override来重写父类的方法,这两个都是在访问修饰符后加。
当子类与父类方法名相同时,有两种情况:
1、参数不同时,表现为重载
2、参数相同时,表现为重写或者覆盖
覆盖就是子类在继承时,当与父类方法名相同,如果不重写父类的方法,可以加new关键字,隐藏父类方法,也就是覆盖。
怎么重写父类方法?
1、在父类的访问修饰符后加virtual修饰,这时,父类为虚方法
2、在子类的访问修饰符后加override,重写父类方法
重写与重载的区别
重载是方法的名称相同,参数或参数类型不同,进行多次重载以适应不同的需求。重载是面向过程的概念
重写是进行父类中方法的重写。重写是面向对象的概念
重写与重载不一样,要区分开
什么叫虚方法?
方法中有virtual修饰的叫虚方法
虚方法可以在子类中通过override关键字来重写
常见的虚方法:Tostring() Equals
虚方法与重写需要注意几点:
1、方法不能用static修饰,也就是静态方法不能重写也不能是虚方法
2、重写时,子类的参数必须与父类相同。
3、虚方法不能用private修饰,也就是说virtual不能与private一起使用
抽象
如果一个方法,有abstract修饰,那么这个方法就叫抽象方法,抽象方法所在的类,也要用abstract修饰,这个类也叫抽象类
抽象方法没有方法体,直接分号结束 如:public abstractvoid Shout();
如果一个类继承了抽象类,那么,这个类中的方法,必须要重写父类中的抽象方法。
简单说,有abstract修饰的方法和类叫抽象方法抽象类,抽象方法没有方法体,所以在继承的时候子类必须要重写方法,抽象方法只能在抽象类中。
注意:
1、抽象方法没有方法体
2、抽象成员只能存在于抽象类中
3、抽象类可以有非抽象成员
4、抽象类的派生类必须实现抽象方法体
5、抽象类只能用作父类,无法实例化
虚方法与抽象方法的比较:
接口
什么是接口?有interface修饰的,完全抽象的一种约定,其中的成员只有定义,没有实现内容
接口的名称通常以大写I开头,如IFly IOny
语法:
[访问修饰符] interface 接口名
{
接口成员定义
}
接口中可以有属性、方法,但是未实现,就是不能直接用,因为接口成员还没定义方法体。如:
interfaceIFly //定义了一个接口
{
voidFly(); //接口成员
}
接口是用来实现的,所有成员默认为public
怎样实现一个接口?
与继承类似,但必须有实现内容,也就是多了一段代码,代码中为要实现的内容,然后就可以调用接口内的方法了。如:
publicvoid Fly()
{
Console.WriteLine("我是超级美女"); //实现内容
}
如果一个类只实现接口,冒号后直接接口名,即继承了类又实现了接口,在父类后逗号+接口名,类必须写在前面,接口一定是在后面。如:
class Student:Person,IComparable
一个类只能继承一个父类,但可以实现多个接口
接口与类的异同
不同点:
1、接口不能直接实例化
2、接口不包含方法的实现
3、接口可以多实现,类只能单继承
4、类可以在不同的源文件之间进行拆分,就是可以有多个文件
相同点:
接口、类和结构都可以从多个接口继承
接口类似于抽象父类:继承接口的任何非抽象类型都必须实现接口的所有成员。
接口和类都可以包含事件、索引器、方法和属性
C#支持多重继承么?
类之间不支持,接口之间支持。
类对接口叫做实现,不叫继承。
类只能有一个父类,但可以有多个接口,如果说父类是爹,接口就相当于能力,可以有多个能力,但不能有多个爹。
当程序编译时没出错,运行出现错误,我们可以调试程序,找出错的原因,然后解决问题。
Ps:程序出现异常或者错误时,千万要冷静淡定,看下异常提示或错误原因,一条条检查代码,或者设置断电调试下,看下是不是哪里代码写漏还是写错,补上更正。。
---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------