Java类中的super关键字是否编译为this.getClass.getSuperClass()...?

时间:2013-06-16 10:06:38

标签: java inheritance keyword extends super

我正在尝试找出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关键字如何访问超类方法?

提前致谢。

1 个答案:

答案 0 :(得分:1)

即使有一些基本的构造java,它也被一部分java替换为字符串连接

"Colour: " + this.getColour()

装置

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

但是,我不认为这适用于任何关键字。超级,也不是这样,抛出,扩展等都不能由其他java表达式实现。它们构建了语言的基础,并且不仅仅是用这种语言高效工作的语法糖。因此,它们通过字节代码和其他基本构造构建。