Java中的继承和方法范围

时间:2011-09-27 15:24:29

标签: java inheritance

在以下示例伪代码中:

public class MyPanel extends JPanel {
    public void reset() {
        this.clear();
        clear();
    }
    public void clear() { System.out.println("FAIL"); }
};

public class MySpecialPanel extends MyPanel {
    public void clear() { System.out.println("Hello, world"); }
};

调用(new MySpecialPanel()).reset()时,this.clear()clear()不应同时解析? this.clear()clear()之间有什么区别吗?

4 个答案:

答案 0 :(得分:5)

public void reset() {
    this.clear();
    clear();
}

在上面的代码中,它调用相同的方法两次。 clear()this.clear()之间没有区别。

您可以使用super.clear()显式调用超类方法。

答案 1 :(得分:1)

this.clear()clear()之间没有区别。

您有一个MySpecialPanel对象,并且该对象上的clear()方法被调用两次。要清除超类,必须使用super.clear()

所以,你做这样的事情 -

public void reset() {
        clear();
        super.clear();
}

答案 2 :(得分:0)

你的代码中的

public void reset() {
    this.clear();
    clear();
}

this.clear()和clear()都是一样的。

这是一个用于在类本身内设置调用范围的关键字 super将范围设置为类本身和超类

答案 3 :(得分:0)

说明显而易见的许多已经响应 - 当你在一个对象上调用clear()时,该对象在范围内;当您使用this时,您指的是上下文中的同一个对象。