java中所有函数都是虚函数_你能用Java编写虚拟函数/方法吗?

你能用Java编写虚拟函数吗?

是。 事实上,Java中的所有实例方法都是默认情况下是虚拟的。 只有某些方法不是虚拟的:

类的方法(因为通常每个实例保存的信息像指向一个vtable关于其具体方法,但没有实例在这里可用)。

私有实例方法(因为没有其他类可以访问该方法,因此调用实例始终具有定义类本身的types,因此在编译时明确知道)。

这里有些例子:

“正常”的虚拟function

以下示例来自另一个答案中提到的维基百科页面的旧版本 。

import java.util.*; public class Animal { public void eat() { System.out.println("I eat like a generic Animal."); } public static void main(String[] args) { List animals = new LinkedList(); animals.add(new Animal()); animals.add(new Fish()); animals.add(new Goldfish()); animals.add(new OtherAnimal()); for (Animal currentAnimal : animals) { currentAnimal.eat(); } } } class Fish extends Animal { @Override public void eat() { System.out.println("I eat like a fish!"); } } class Goldfish extends Fish { @Override public void eat() { System.out.println("I eat like a goldfish!"); } } class OtherAnimal extends Animal {}

输出:

我像一个普通的动物吃。

我像鱼一样吃!

我喜欢吃金鱼!

我像一个普通的动物吃。

与接口的例子

Java 接口方法都是虚拟的。 它们必须是虚拟的,因为它们依赖于实现类来提供方法实现。 要执行的代码只能在运行时select。

例如:

interface Bicycle { //the function applyBrakes() is virtual because void applyBrakes(); //functions in interfaces are designed to be } //overridden. class ACMEBicycle implements Bicycle { public void applyBrakes(){ //Here we implement applyBrakes() System.out.println("Brakes applied"); //function } }

具有抽象类的虚函数示例

与接口类似, 抽象类 必须包含虚拟方法,因为它们依赖于扩展类的实现。 例如:

abstract class Dog { final void bark() { //bark() is not virtual because it is System.out.println("woof"); //final and if you tried to override it } //you would get a compile time error. abstract void jump(); //jump() is a "pure" virtual function } class MyDog extends Dog{ void jump(){ System.out.println("boing"); //here jump() is being overridden } } public class Runner { public static void main(String[] args) { Dog dog = new MyDog(); // Create a MyDog and assign to plain Dog variable dog.jump(); // calling the virtual function. // MyDog.jump() will be executed // although the variable is just a plain Dog. } }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值