例如:
import acm.gui.*;
import acm.program.*;
import java.awt.event.*;
import javax.swing.*;
import acm.graphics.*;
public class TemperatureConverter extends Program {
private IntField fahrenheitField;
public void init() {
fahrenheitField = new IntField(32);
fahrenheitField.addActionListener(this);
}
}
假设我知道TemperatureConverter
是ActionListener
的子类,fahrenheitField.addActionListener(this);
实际上是什么意思?因为我喜欢"啊,这整个屏幕现在显示了我的TemperatureConverter"的一个实例,是什么意思将它作为fahrenheitField
传递给ActionListener
? / p>
答案 0 :(得分:1)
不知道你的课程是什么,但这应该澄清混乱
IntField
或其任何超类声明了addActionListener(ActionListener al)
方法,那么您需要将其传递给“ActionListener
”。ActionListener
是interface
,因此前一点中的“ActionListener
”是它或其任何超类实现ActionListener
接口的任何类或其任何子接口。ActionListener
”的类与调用addActionListener
的类相同,则this
关键字引用该类的当前实例。在以下示例中,MyClass
是“ActionListener
”:
类直接实现接口
class MyClass implements ActionListener
类直接实现子接口
class MyClass implements SubActionListener
interface SubActionListener extends ActionListener
Class是直接实现接口
的类的子类class MyClass extends SuperMyClass
class SuperMyClass implements ActionListener
Class是直接实现子接口
的类的子类class MyClass extends SuperMyClass
class SuperMyClass implements SubActionListener
interface SubActionListener extends ActionListener
在这些示例中,SuperMyClass
是MyClass
的直接超类,但它可以位于继承层次结构的任何位置。接口也一样。
还有一些冗余实现,例如
class MyClass extends SuperMyClass implements ActionListener
class SuperMyClass implements ActionListener
或其他奇怪的组合。
的子类
TemperatureConverter
是ActionListener
语义,但是一个类不能是接口的子类(相反,有趣的是,不是真的)。