Java语言的虚函数是怎么样的?

起因:刷题是遇到一个基础题,题如下:

以下关于面向对象的描述错误的是:

  • 面向对象的基本特性是封装,继承和多态
  • 构造函数不可以是虚函数,析构函数可以是虚函数
  • 子类重新定义父类虚函数的方法叫做重载
  • 多态是为了接口重用,封装和继承是为了代码重用
对于B选项,本人对其很模糊,于是去看各路大神的文章……

一 . 虚函数的定义

在某基类中声明为 virtual 并在一个或多个派生类中被重新定 义的成员函数,用法格式为:virtual 函数返回类型 函数名(参数表) {函数体};实现多态性,通过指向派生类的基类指针或引用,访问派生类中同名覆盖成员函数。----(百度百科)

这里的 “基类” 可以理解为--接口。

下面看Java代码:

package test;  
  
class A{  
    public void YOU(){  
        System.out.println("YOU in A is called");  
    }  
}  
class B extends A{  
    public void YOU(){  
        System.out.println("YOU in B is called");  
    }  
}  
public class VirtualTest {  
  
    public static void main(String args[])  {  
        A a = new A();  
        B b = new B();  
        A p;  
  
        p = a;  
        p.YOU();  
        p = b;  
        p.YOU();  
    }  
}  

运行上面的代码可以看到输出的结果:

YOU in A is called;
YOU in B is called;
以上代码中,定义了一个基类(在java中应该叫引用)去指向不同的对象,可以发现同样可以实现多态。

也就是说,java的普通成员函数(没有被static、native等关键字修饰)就是虚函数。

原因很简单,它本身就实现虚函数实现的功能------多态。

(以上只是本人的一个泛泛理解,若想更透彻的理解,可以用Java二进制运行,或者结合c++虚函数对比)

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wj01111/article/details/54632599
上一篇转spring配置定时器的时间设置
下一篇java1.7版本之后,switch条件支持字符串
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭