当前位置: 首页 > 面试题库 >

Java继承中的“ this”关键字如何工作?

罗乐意
2023-03-14
问题内容

在下面的代码片段中,结果确实令人困惑。

public class TestInheritance {
    public static void main(String[] args) {
        new Son();
        /*
        Father father = new Son();
        System.out.println(father); //[1]I know the result is "I'm Son" here
        */
    }
}

class Father {
    public String x = "Father";

    @Override
    public String toString() {
       return "I'm Father";
    }

    public Father() {
        System.out.println(this);//[2]It is called in Father constructor
        System.out.println(this.x);
    }
}

class Son extends Father {
    public String x = "Son";

    @Override
    public String toString() {
        return "I'm Son";
    }
}

结果是

I'm Son
Father

为什么“ this”在父亲构造函数中指向Son,而“ this.x”却指向父亲在构造函数中的“ x”字段。“ this”关键字如何运作?

我知道 多态的 概念,但是[1]和[2]之间没有区别吗?触发 新的Son() 时,内存中发生了什么?


问题答案:

默认情况下,所有成员函数在Java中都是多态的。这意味着当您调用this.toString()时,Java使用动态绑定来解决该调用,即调用子版本。当您访问成员x时,您将访问当前作用域的成员(父亲),因为成员不是多态的。



 类似资料:
  • 问题内容: “ this”关键字如何工作? 问题答案: [§11.1.1]的关键字 所述关键字的计算结果为当前执行上下文的ThisBinding的值 这个绑定是JavaScript解释器在评估JavaScript代码时所维护的,例如特殊的CPU寄存器,其中包含对对象的引用。每当在以下三种情况之一中建立执行上下文时,解释器都会更新ThisBinding: 1.初始全局执行上下文 在顶级代码中评估的J

  • 问题内容: 我刚刚遇到了一个有趣的JavaScript情况。我有一个类,该类的方法使用对象文字表示法定义了多个对象。在这些对象内部,正在使用指针。从程序的行为,我推断出指针是指向在其上调用方法的类,而不是由文字创建的对象。 尽管这是我期望的工作方式,但这似乎是任意的。这是定义的行为吗?跨浏览器安全吗?是否有任何推理依据说明它超出了“规格说明”的范围(例如,这是某些更广泛的设计决策/理念的结果)吗?

  • 本文向大家介绍“ this”关键字在JavaScript中如何工作?,包括了“ this”关键字在JavaScript中如何工作?的使用技巧和注意事项,需要的朋友参考一下 在JavaScript中,此关键字用作引用,以引用执行的代码的对象或主题。 示例

  • 问题内容: 学习Java一段时间后,第一次使用关键字就让我非常困惑。 这就是我的困惑。我写了以下代码: 我得到以下输出: 现在,这里的第一个问题是:为什么并指向基类而不是Child类?而且如果指向基类的,为什么要调用子类的?字段和方法的行为是否有所不同? 但是,主要关注的是关键字的机制。我的意思是,您知道(指向)当前对象。如果您考虑一下,这不是魔术行为。在某处一定有田野。例如,类的文字是不可见的,

  • 问题内容: 我们有下课: 输出为: 超 子 问题: 什么礼物?是父级的对象,哪个孩子作为字段保留? 如果是这样,抽象类的继承如何工作?您不能创建抽象类的实例。 如果不是,重写方法在哪里保留? 我尝试使用Google,但发现的只是关于如何继承类的常见信息。 更新: 您仍在告诉我明显的事情。也许我的问题没有引起误解,但我将尝试改写一下: 当我们使用调用方法时,您说的是,我们正在访问父级的方法。但是,如

  • 主要内容:this.属性名,this.方法名,this( )访问构造方法this 关键字是 Java 常用的关键字,可用于任何实例方法内指向当前对象,也可指向对其调用当前方法的对象,或者在需要当前类型对象引用时使用。 下面我们根据示例分别讲解 this 关键字的作用。 this.属性名 大部分时候,普通方法访问其他方法、成员变量时无须使用 this 前缀,但如果方法里有个局部变量和成员变量同名,但程序又需要在该方法里访问这个被覆盖的成员变量,则必须使用 this 前缀