【问题标题】:Does super keyword in Java class compiles to this.getClass.getSuperClass()...?Java 类中的 super 关键字是否编译为 this.getClass.getSuperClass()...?
【发布时间】:2013-06-16 10:06:37
【问题描述】:

我正在尝试找出 JAVA 中 super 关键字背后的实现。

我创建了一个抽象类和一个公共类扩展

abstract class AbsClass {

    private String colour;

    public AbsClass(String colour) {
        this.colour = colour;
    }

    void findColour()
    {
        System.out.println(this.colour);
    }

    //getter and setter 
}

现在我有一个实现该抽象类的公共类。

package abstraact.concept;

import java.lang.reflect.Method;

public class ExtendAbsClass extends AbsClass {

    public ExtendAbsClass(String colour) {
        super(colour);
    }


    @Override
    void findColour() {
        super.findColour();

    /* Is the above line similar to

        mthd = this.getClass().getSuperclass().getDeclaredMethod("findColour", null);
        mthd.invoke(this, null); 
    */


    System.out.println("Colour in sub class method " + this.getColour());

    }


    public static void main(String[] args) {
        ExtendAbsClass absClass = new ExtendAbsClass("Blue");
        absClass.findColour();
    }
}

在哪里我可以看到 super 关键字以及 'this` 关键字背后的实现。

super 关键字如何访问超类方法?

提前致谢。

【问题讨论】:

  • 二进制代码:invokespecial AbsClass.findColour().
  • “实施”是什么意思?您可以随时查看编译器为您的程序生成的字节码...

标签: java inheritance keyword extends super


【解决方案1】:

尽管有一些基本的 java 构造,它们被 java 的一部分所取代,比如 String concatenation where

"Colour: " + this.getColour()

意思

new StringBuilder(new String(new char[] {'C', 'o'..., ' '}).intern()).append(this.getColour());

但是,我认为这不适用于任何关键字。其他 java 表达式都不能实现 super 和 this、throws、extends 等。它们构建了语言的基础,而不仅仅是语法糖,可以有效地使用这种语言。因此,它们是通过字节码和其他基本结构构建的。

【讨论】:

    猜你喜欢
    • 2018-09-18
    • 2011-04-30
    • 2018-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-13
    • 2022-12-09
    • 1970-01-01
    相关资源
    最近更新 更多