大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺
前言;在前面的博客重写中提到了虚方法和抽象类,本博文详细介绍下虚方法:
一.虚方法的定义:
当有一个定义在类中的函数需要在继承类中实现时,可以使用虚方法,虚方法是使用关键字virtual
声明的,虚方法可以在不同的继承类中有不同的实现,即为基类中定义的允许在派生类中重写的方法;
二.虚方法的声明:
一般的声明形式如下:
访问修饰符 virtual 函数返回类型 函数名(参数表) {
函数体};
举例:
class Person
{
public virtual void XXX()
{
Console.WriteLine("我有一个梦想,那就是动身去往远方!!");
}
}
三.虚方法的调用:
调用上,使用子类构造的对象调用虚方法,就会调用子类的方法,使用父类构造的对象,就会调用父类的方法;(在规则 4 中有举例说明)
1.在基类中声明的虚方法一般在派生类中对其进行调用,会运用到base
关键字:
当输入访问修饰符和override
后,系统会自己弹出我们刚才编写的虚方法,直接进行选择即可:
2.在运行时进行调用:
四.虚方法的规则:
1. 虚拟类其实指的是正常类中的虚拟方法,所以虚拟类可以直接使用实例,这是与抽象类不同的一点;
它不会像抽象类一样进行报错!!!
2. 虚拟方法是在方法前加virtual关键字,对方法进行声明,说明这个方法为虚方法;
class Person
{
public virtual void XXX()//虚方法
{
Console.WriteLine("我有一个梦想,那就是动身去往远方!!");
}
}
class Boy : Person//继承person
{
public override void XXX()//虚方法调用
{
base.XXX();
}
}
3. 虚拟函数和正常函数无区别;
4. 子类继承虚拟类可以实现虚拟方法也可以不实现虚拟方法;
如下代码所示,在调用虚方法时,对虚方法进行了重写,这样代码执行下来的就是子类的方法而不是父类的虚方法:::
class Person
{
public virtual void XXX()
{
Console.WriteLine("我有一个梦想,那就是动身去往远方!!");
}
}
class Boy : Person
{
public override void XXX()
{
Console.WriteLine("我不想继承父类的虚方法");
}
public void SSS()
{
Console.WriteLine("不学习就不会进步,不仅不就没有出人头地的机会");
}
}
class Program
{
static void Main(string[] args)
{
Person person = new Person();//实例化的虚方法类
Boy boy = new Boy();//实例化的子类
boy.XXX();//调用了子类的方法
boy.SSS();
Console.ReadLine();
}
}
结果如图所示:
但是如果我们采用base
关键字进行调用的话就会有以下的结果:
public override void XXX()
{
base.XXX();
// Console.WriteLine("我不想继承父类的虚方法");
}
结果如下:它调用了父类/基类的虚方法
5. 虚方法可以在不同的继承类中有不同的实现;
我们在以上案例中继续进行添加调用虚方法:
class DD : Person
{
public override void XXX()
{
base.XXX();
Console.WriteLine("我是第一个继承虚方法的");
}
}
class SS : Person
{
public override void XXX()
{
base.XXX();
Console.WriteLine("我是第二个继承虚方法的");
}
}
当然别忘记实例化哦,我在这儿就不写实例化的代码了,但是千万不能忘记哦!!?
运行结果:
五.虚方法注意事项:
- 一定要注意,只有为虚方法时可以进行重写,不能对非虚方法进行重写;
- 虚方法在形式上在方法名前加
virtual
修饰; - 虚方法一般在基类定义,在派生类中实现具体操作,派生类实现该方法时,要用
override
对其方法进行修饰; - 当用
virtual
修饰后,不允许再有static
、abstract
或者override
修饰符;
六.虚方法的好处:
当在基类中进行虚方法的定义以后,在派生类中可以对其方法进行调用,而且可以通过重写来改变其中实现的功能来实现自己的一些功能,而不是虚方法时,必须重新声明方法然后再进行自己想要的功能进行编写然后再进行调用,但是虚方法只需要在派生类中对其进行调用,如果想实现其他的功能可以对其进行方法等的重写,进而实现自己想要的功能,调用基类的虚方法来执行派生类的具体操作。而在基类调用时,并不需要知道派生类是怎么样实现的。因为不同的派生类可能实现的方式不一样。但调用的方式是一样的,实现了不同的功能
七.虚方法的作用:
1.允许 子类 / 派生类 进行重写;
2.增加代码的可维护性,脉络较清淅有条理;
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/197537.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...