方法的继承与变量的继承有何不同?为什么?

戴夫

在准备OCJP考试时,我偶然发现了一个问题,无法解决问题。这是一个问题的代码(由我进行了一些修改):

class Foo {
    public int a = 3;
    public void addFive() {
        a += 5;
        System.out.print("f ");
    }
}

class Bar extends Foo {
    public int a = 8;
    public void addFive() {
        a += 5;
        System.out.print("b ");
    }
}

public class TestInheritance {
    public static void main(String [] args) {
        // part 1
        Foo f = new Bar();
        f.addFive();
        System.out.println(f.a);

        // part 2
        Bar b = new Bar();
        b.addFive();
        System.out.println(b.a);
    }
}

输出为:

b 3
b 13

第2部分,我可以理解。这没什么奇怪的。但是第1部分不让我晚上入睡。我知道为什么Bar.addFive运行,但是为什么在实例化一个对象在第1部分中f.a打印看来方法的继承与变量的继承大不相同。我想了解这个概念的地方是什么?我在做什么?Foo.anew Bar()

谢尔盖·卡里尼琴科(Sergey Kalinichenko)

看起来继承对于方法和变量的工作方式大不相同。

更准确地说,继承不会使变量多态。当您声明相同的方法时,派生类中的方法将覆盖基类中的方法。当声明相同的变量时,基类中的变量被派生类中的变量隐藏。

在您的示例中,Bar有两个变量a,但只有一个方法addFive()本质上,每个Bar对象都包含两个整数-Foo.aBar.a这两个是单独的变量。然而,该addFive方法是在所定义的一个Bar,因为它覆盖(取代)addFiveFoo

请注意,Java通过调用允许Bar访问,但是缺乏这种可能性的用户Foo.addFivesuper.addFive()Bar

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

方法的继承与变量的继承有何不同以及为什么不同?

来自分类Dev

引用继承的属性/变量时,使用this.X和base.X的行为有何不同?

来自分类Dev

Python元类与常规类继承有何不同?

来自分类Dev

Liskov替换原理与常规继承有何不同?

来自分类Dev

为什么继承的Docker映像的大小不同

来自分类Dev

为什么所有方法都不从类继承?

来自分类Dev

为什么所有方法都不从类继承?

来自分类Dev

为什么我不能继承此变量?

来自分类Dev

为什么最终类不能被继承而最终方法可以被继承?

来自分类Dev

为什么这种继承有效?

来自分类Dev

为什么要实现继承的抽象方法?

来自分类Dev

C ++继承-为什么调用父方法?

来自分类Dev

为什么要实现继承的抽象方法?

来自分类Dev

为什么说静态方法不能被继承?

来自分类Dev

Class如何不继承某些变量?

来自分类Dev

私有变量继承

来自分类Dev

为什么重复继承/重复继承无效?

来自分类Dev

有什么方法可以在枚举之间继承?

来自分类Dev

为什么QWidget在继承时会表现出不同的行为

来自分类Dev

为什么在使用多重继承时使用不同的`this`地址

来自分类Dev

继承相同的变量但名称不同

来自分类Dev

为什么我的virtualenv继承了系统的旧环境变量?

来自分类Dev

为什么我不继承超类变量?

来自分类Dev

为什么subshell不继承导出的变量(PS1)?

来自分类Dev

为什么angularjs指令继承范围但不更改范围变量?

来自分类Dev

如果我的课没有继承任何东西,为什么我可以覆盖Equals方法?

来自分类Dev

为什么文档具有getElementById方法,即使它不继承自Element?

来自分类Dev

为什么继承类静态方法而不继承接口静态方法?

来自分类Dev

threadlocal变量与方法级变量有何不同

Related 相关文章

  1. 1

    方法的继承与变量的继承有何不同以及为什么不同?

  2. 2

    引用继承的属性/变量时,使用this.X和base.X的行为有何不同?

  3. 3

    Python元类与常规类继承有何不同?

  4. 4

    Liskov替换原理与常规继承有何不同?

  5. 5

    为什么继承的Docker映像的大小不同

  6. 6

    为什么所有方法都不从类继承?

  7. 7

    为什么所有方法都不从类继承?

  8. 8

    为什么我不能继承此变量?

  9. 9

    为什么最终类不能被继承而最终方法可以被继承?

  10. 10

    为什么这种继承有效?

  11. 11

    为什么要实现继承的抽象方法?

  12. 12

    C ++继承-为什么调用父方法?

  13. 13

    为什么要实现继承的抽象方法?

  14. 14

    为什么说静态方法不能被继承?

  15. 15

    Class如何不继承某些变量?

  16. 16

    私有变量继承

  17. 17

    为什么重复继承/重复继承无效?

  18. 18

    有什么方法可以在枚举之间继承?

  19. 19

    为什么QWidget在继承时会表现出不同的行为

  20. 20

    为什么在使用多重继承时使用不同的`this`地址

  21. 21

    继承相同的变量但名称不同

  22. 22

    为什么我的virtualenv继承了系统的旧环境变量?

  23. 23

    为什么我不继承超类变量?

  24. 24

    为什么subshell不继承导出的变量(PS1)?

  25. 25

    为什么angularjs指令继承范围但不更改范围变量?

  26. 26

    如果我的课没有继承任何东西,为什么我可以覆盖Equals方法?

  27. 27

    为什么文档具有getElementById方法,即使它不继承自Element?

  28. 28

    为什么继承类静态方法而不继承接口静态方法?

  29. 29

    threadlocal变量与方法级变量有何不同

热门标签

归档