Java继承问题-尝试了解概念

用户名

我试图理解继承的概念,我有一个小问题。

我有两个A类和B类:

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

    public void arik ()
    {
        System.out.println("Arik_B");
    }
    public void yosef ()
    {
        System.out.println ("Yosef");
    }

    public void superYosef()
    {
        super.yosef();
    }
}

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

    public void arik ()
    {
        System.out.println ("Arik_A");
    }

    public void yosef ()
    {
        arik();
    }
}

主要:

A ab = new B();
((B) ab).superYosef();

该行将A ab = new B();打印AB,这很清楚。但是行((B) ab).superYosef();打印Arik_B,我不明白为什么。在运行之前ab是type A,在运行时是B,因此需要打印Yosef

杰斯珀

当你做

A ab = new B();

那么ab类型的变量A,但是它指向的实际对象是类型的B对象的实际类型决定了将调用哪个方法,而不是变量的类型。

因此,当您调用任何ab已在class中被覆盖的方法时,都会调用classB中的版本B

让我们看看这里发生了什么:

((B) ab).superYosef();

您需要进行强制转换,因为该方法superYosef仅在class中定义B

该方法调用super.yosef();,它将yosef在类中调用该方法AA.yosef通话arik,而且这种方法在课堂上被覆盖B请注意,我们已经在实际上是a的对象上调用了方法B,因此调用arik方法Bprint Arik_B

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

尝试了解Java枚举中函数的用法

来自分类Dev

首先尝试了解Java泛型

来自分类Dev

了解Java中的概念

来自分类Dev

了解Java中的概念

来自分类Dev

尝试了解Shell脚本

来自分类Dev

Java:NoClassDefFoundError,并尝试了类似问题的解决方案

来自分类Dev

了解Java中的参考概念

来自分类Dev

尝试使用继承和泛型时尝试添加Function FunctionalInterface调用的Java 8问题

来自分类Dev

尝试了解不同的CRC实现

来自分类Dev

尝试了解输入验证循环

来自分类Dev

尝试了解Kafka Scala语法

来自分类Dev

我正在尝试了解算法的作用

来自分类Dev

我正在尝试了解这些分区

来自分类Dev

Java继承问题

来自分类Dev

Java继承问题

来自分类Dev

Java继承和覆盖的概念很困难

来自分类Dev

阐明多重继承的概念:是否会发生钻石结构问题?

来自分类Dev

尝试了解EF6的存储库模式

来自分类Dev

尝试了解c中的循环和getchar()

来自分类Dev

尝试了解由字符串对象维护的指针

来自分类Dev

尝试了解android支持库23.2.1中BottomSheet的行为

来自分类Dev

仍在尝试了解mysql到json数据

来自分类Dev

尝试了解iOS 8中的UIScrollView自动布局

来自分类Dev

尝试了解iOS 8中的UIScrollView自动布局

来自分类Dev

尝试了解由字符串对象维护的指针

来自分类Dev

尝试了解c中的循环和getchar()

来自分类Dev

尝试了解EF6的存储库模式

来自分类Dev

我正在尝试了解以下javascript代码

来自分类Dev

尝试了解 Azure 云服务中的负载平衡