首页 > Java > java教程 > 正文

Java中的虚函数

王林
发布: 2024-08-30 15:35:01
原创
451 人浏览过

作为一种面向对象的编程语言,java 支持继承、多态、向上转型等特性。因此,Java 中的 OOP 处理的是对象、类和函数。虚函数是Java中促进运行时多态性的成员函数之一。在这篇文章中,我们将讨论Java中的虚函数。

定义:虚函数不是任何特殊函数,而是一个促进方法重写机制的成员函数。这意味着,在 OOP 中,父类的虚函数是可以被具有相同类型但具有不同功能的子类覆盖的函数。

广告 该类别中的热门课程 JAVA 掌握 - 专业化 | 78 课程系列 | 15 次模拟测试

开始您的免费软件开发课程

网络开发、编程语言、软件测试及其他

语法:对于Java中的虚函数,您应该遵循带有注释的java基本语法。为了实现虚函数的重写机制,这里可以使用@Override注解来专门指出我们要重写哪个虚函数,尽管这不是强制性的。

Java 中虚拟函数如何工作?

现在让我们看看虚函数是如何工作的。当我们通过其父类型引用调用子类的重写方法时,对象的类型或引用指示将调用哪个方法。该决定的结论发生在编译后的运行时期间。因此,虚函数的功能被继承的相同类型的子类覆盖。

有关虚拟功能的一些要点:

  • 子类和父类的函数必须具有相同的名称和相同的参数。
  • IS-A 关系是强制性的(继承)。
  • 虚函数不能是私有的,因为我们无法覆盖父类的私有方法。
  • 虚函数不能被声明为 Final,因为我们无法重写 Final 方法。
  • 虚函数不能声明为静态,因为我们无法重写静态方法。

Java 中的虚函数示例

我们将在这里讨论一些虚函数的代码示例。

示例#1

在此示例中,我们将展示虚拟函数 showMe() 如何根据与其关联的对象引用显示不同的文本。当它与“Head”类型关联时,它显示来自父类的消息。当它与“从属”类型关联时,它显示来自子类的消息。

代码:

class Head {
public void showMe() {
System.out.println("I am Head");
}
}
class Subordinate extends Head {
@Override
public void showMe() {
System.out.println("I am Subordinate ");
}
}
public class VirtualFuntionDemo {
public static void main(String args[]) {
Head superObject = new Head();
superObject.showMe(); //method of super class or parent class is called
Head subObject = new Subordinate(); // upcasting
subObject.showMe();//method of sub class or child class is called by Parent reference, this is called "Virtual function"
Subordinate subObject2 = new Subordinate();
subObject2.showMe(); //method of sub class or child class is called
}
}
登录后复制

输出:

Java中的虚函数

示例#2

让我们以多级继承情况下的虚函数为例。在此示例中,我们考虑了两个继承级别。在此示例中,我们将展示虚拟函数 Administration() 如何根据与其关联的对象类型显示不同的消息。当它与“State”类型关联时,它显示来自父类的消息。当它与“District”类型关联时,它显示来自其子类的消息。同样,在继承的第二级中,当与“Municipality”类型关联时,它显示来自其父级“District”类的子类的消息。

代码:

class State{
void administartion() {
System.out.println("This is under state govt.");
}
}
class District extends State{
void administartion(){
System.out.println("This is under District Magistrate");
}
}
class Municipality extends District{
void administartion(){
System.out.println("This is under Mayor ");
}
}
public class VirtualFunctionDemo2 {
public static void main(String args[]){
State superObject=new State ();
State subObject=new District ();
State sub2Object=new Municipality ();
superObject. administartion ();
subObject.administartion (); // run time polymorphism occurs in virtual function happening in first level of heritance
sub2Object.administartion (); // run time polymorphism occurs in virtual function happening in 2nd level of heritance
}
}
登录后复制

输出:

Java中的虚函数

示例 #3

让我们再举一个多级继承情况下运行时多态性的例子。在此示例中,我们考虑了三个继承级别。在此示例中,我们将展示虚拟函数 whoami() 如何根据与其关联的对象类型显示不同的功能。当它与“汽车”类型关联时,它显示来自父类的消息。当它与“SUV”类型关联时,它显示来自其子类的消息。同样,在第二级继承中,当与“MPV”类型关联时,它显示来自其父类“SUV”类的子类的消息。同样在第三级继承中,当与“Hatchback”类型关联时,它显示来自其父类“MPV”类的子类的消息。

代码:

class Cars{
void whoami() {
System.out.println("This is Car");
}
}
class SUV extends Cars{
void whoami(){
System.out.println("This is SUV");
}
}
class MPV extends SUV{
void whoami(){
System.out.println("This is MPV");
}
}
class Hatchback extends MPV{
void whoami(){
System.out.println("This is hatchback");
}
}
public class VirtualFunctionDemo3 {
public static void main(String args[]){
Cars superObject=new Cars();
Cars subObject=new SUV();  // object of child type : 1st level heritance
Cars sub2Object=new MPV();  // object of child type : 2nd level heritance
Cars sub3Object=new Hatchback();  // object of child type : 3rd level heritance
superObject.whoami();
subObject.whoami();  //run time polymorphism occurs in virtual function happening in first level of heritance
sub2Object.whoami(); //run time polymorphism occurs in virtual function  happening in second level of heritance
sub3Object.whoami(); //run time polymorphism occurs in virtual function  happening in third level of heritance
}
}
登录后复制

输出:

Java中的虚函数

结论

我们对“Java 中的虚拟函数”主题的学习到此结束。在java编译器中自己编写上面示例中提到的代码并验证输出。如果你不会自己写代码,那么代码的学习是不完整的。

以上是Java中的虚函数的详细内容。更多信息请关注PHP中文网其他相关文章!

相关标签:
来源:php
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!