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

原创 2017年01月20日 17:11:26

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

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

  • 面向对象的基本特性是封装,继承和多态
  • 构造函数不可以是虚函数,析构函数可以是虚函数
  • 子类重新定义父类虚函数的方法叫做重载
  • 多态是为了接口重用,封装和继承是为了代码重用
对于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++虚函数对比)

版权声明:本文为博主原创文章,未经博主允许不得转载。

JAVA – 虚函数、抽象函数、抽象类、接口

JAVA – 虚函数、抽象函数、抽象类、接口1. Java虚函数虚函数的存在是为了多态。C++中普通成员函数加上virtual关键字就成为虚函数Java中其实没有虚函数的概念,它的普通函数就相当于C+...
  • trojanpizza
  • trojanpizza
  • 2011年06月20日 16:27
  • 58940

Java语言到底有没有虚函数?

前几天面试京东的时候,被问到c++与java函数的区别。其中有一条是,java中有没有虚函数?本文将从虚函数的定义及java字节码层面上告诉你答案。 定义:在某基类中声明为 virtual 并在一...
  • wuqiuping695
  • wuqiuping695
  • 2015年10月12日 11:21
  • 4949

JAVA的虚函数怎样实现

Java中有虚函数,但是没指针,那也许会有这样的问题,那java是怎么实现多态的? java中可以肯定是有虚函数的,而且我们假如不申明为final形他默认就是虚函数.不用vitual申明. "In J...
  • guofengzai
  • guofengzai
  • 2008年06月10日 10:30
  • 4234

Java中的“虚函数”,抽象类的抽象函数

在C++中通常可以通过虚函数实现多态, 在Java中可以通过抽象类的抽象方法实现; 所以在这里可以将 abstract 理解为 virtual但是又不完全这样理解; 在Java中,abstract 还...
  • chinabinlang
  • chinabinlang
  • 2015年09月29日 18:04
  • 1047

java中的虚方法

声明为父类类型的引用变量只能调用父类中的方法,如果此变量实际引用的是子类对象,而子类对象中覆盖了父类的方法,这时父类对象调用的是子类中的方法,这种机制就成为虚方法调用。所以,同样的两个引用变量调用相同...
  • HNKONTECNA
  • HNKONTECNA
  • 2017年03月27日 09:07
  • 658

java中虚方法的应用举例

虚方法 我们将介绍在Java中,当设计类时,被重写的方法的行为怎样影响多态性。 我们已经讨论了方法的重写,也就是子类能够重写父类的方法。 当子类对象调用重写的方法时,调用的是子类...
  • better_space
  • better_space
  • 2016年11月06日 15:26
  • 2794

C++ 虚函数、纯虚函数 VS JAVA抽象函数

C++ 虚函数、纯虚函数 VS JAVA抽象函数
  • whjk20
  • whjk20
  • 2016年08月29日 15:02
  • 856

C++父类子类间函数重定义,虚函数重写(覆盖)以及重载

写这篇文章的时候我还是不太确定重定义,重写(覆盖),重载之间的确切的区分方法。下面是我今天的理解以及相关测试代码,以待后观!! 第一:简单的子类重定义父类成员函数(函数三要素:返回类型,函数名,参数...
  • cpp12341234
  • cpp12341234
  • 2016年08月12日 22:48
  • 3872

子类继承父类,重写纯虚函数和虚函数时注意

今天遇到这么个问题,程序中定义了一个借口类,成员函数全是纯虚函数,我写的子类继承了这个接口类,但是报错提示说:无法实例化抽象类! 原因是这样的:子类继承父类时,必须重写父类的纯虚函数,函数名、返回类...
  • GK_2014
  • GK_2014
  • 2015年04月20日 21:51
  • 4332

Java语言到底有没有虚函数?

前几天面试京东的时候,被问到c++与java函数的区别。其中有一条是,java中有没有虚函数?本文将从虚函数的定义及java字节码层面上告诉你答案。 定义:在某基类中声明为 virtual 并在一...
  • wuqiuping695
  • wuqiuping695
  • 2015年10月12日 11:21
  • 4949
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java语言的虚函数是怎么样的?
举报原因:
原因补充:

(最多只允许输入30个字)