java中的抽象/虚函数

时间:2013-05-17 20:22:40

标签: java virtual abstract

我听说所有Java函数都是隐式虚拟的,但我仍然不确定这是否会按照我想要的方式运行。

假设我有一个A级,有孩子B. A和B都有称为foo()的函数,所以B的定义是重写A的。

假设A有一个被调用的函数,它将A的实例作为参数:

如果我将一个B的实例传入函数,它将调用foo()的定义,A或B是什么?

2 个答案:

答案 0 :(得分:4)

正如我在评论中提到的,私有函数不是虚拟函数,我想使用以下示例演示它:

class A {
    public void foo() {
        System.out.println("A#foo()");
    }

    public void bar() {
        System.out.println("A#bar()");
        qux();
    }

    private void qux() {
        System.out.println("A#qux()");
    }
}

class B extends A {
    public void foo() {
        System.out.println("B#foo()");
    }

    private void qux() {
        System.out.println("B#qux()");
    }
}

现在让我们运行以下代码:

A foobar = new B();
foobar.foo(); // outputs B#foo() because foobar is instance of B
foobar.bar(); // outputs A#bar() and A#qux() because B does not have method bar 
              // and qux is not virtual

答案 1 :(得分:3)

B的实施将被调用 这正是virtual的含义。