java重写方法调用

2024-04-21

我有一个超级课程:

public class SuperClass {

    public void dosomething() {
        firstMethod();
        secondMethod();
    }

    public void firstMethod() {
        System.out.println("Super first method");
    }

    public void secondMethod() {
        System.out.println("Super second method");
    }
}

一个子类:

public class SubClass extends SuperClass {

    public void dosomething() {
        super.dosomething();
    }

    public void firstMethod() {
        System.out.println("Sub first method");
    }

    public void secondMethod() {
        System.out.println("Sub second method");
    }
}

测试类:

public static void main(String[] args) {
      SubClass sub = new SubClass();
      sub.dosomething();
      SuperClass sup = new SuperClass();
      sup.dosomething()
}

当我运行测试方法时,我得到了这个:

Sub first method
Sub second method

你能告诉我这是怎么发生的吗?在子类中dosomething方法,我称之为super.dosomething()我认为超级方法会被调用,但子类中的重写方法被调用。

如果我这样做:
SuperClass superClass = new SuperClass();
superClass.dosomething();


结果是:
超级第一法
超级第二种方法

区别在于方法调用位置。我想一定有什么我不知道的事情):

哎呀!第一个例子中的 super 引用指向子类......

像这样:

SuperClass sub = new SubClass();
sub.firstMethod();
sub.secondMethod();


在java中,方法binding http://en.wikipedia.org/wiki/Name_binding总是dynamic http://en.wikipedia.org/wiki/Dynamic_binding_%28computer_science%29[此处忽略静态和私有方法]。因此,当您覆盖firstMethod() and secondMethod(),任何时候类型的对象SubClass将尝试调用其中之一 - 将调用重写方法 - 即使它[调用]来自父级方法。

所以,正如预期的那样 - 当你调用时super.doSomething(),它调用firstMethod() and secondMethod(),并且正在调用重写的方法。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java重写方法调用 的相关文章

随机推荐