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++虚函数对比)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值