有人可以帮助我了解这段代码中发生了什么吗?
public class aClass extends Applet{
public void paint(Graphics g){
g.drawRect(0, 0, 400, 200);
}
}
我的理解是,我创建了一个名为 aClass 的 class (继承)(因为它成为一个女儿)类的方法和属性 >;然后覆盖 绘画 方法(该方法是从Applet继承的),以及此方法期望从类创建的对象作为参数(我们将其命名为 g ) 图形 ,然后我们将 drawRect 方法称为适用于 g 对象(由 Graphics 创建类);这样,当执行 aClase class 时,将绘制一个 rectangle , 这样吗?
答案 0 :(得分:2)
Applet是一种已过时的旧技术,您应该考虑使用诸如Java Web Start之类的较新技术。也就是说,除了某些术语外,您的理解基本上是正确的。
我创建了一个名为aClass的类,该类继承了Applet类的方法和属性(因为它成为子类);
扩展类意味着您基于公共类合同和超类的私有实现(aClass
)创建一个新的子类(在本例中为Applet
)。 aClass
的行为方式应在较高级别上尊重Liskov substitution principle,这意味着在任何可以使用Applet
的地方,您也应该可以使用aClass
。这意味着要遵守Applet
中aClass
的公共合同。
Applet类;然后覆盖paint方法(该方法是从Applet继承的),
部分正确。 aClass
将覆盖 paint
,这意味着它将在paint
实例上调用aClass
而不是{{1}中的默认定义时调用}。它不会覆盖,因为仍然可以调用此方法的Applet
实现。您还应该使用super
批注来批注覆盖的方法
@Override
此方法需要一个对象作为从Graphics类创建的参数(我们将其命名为g)
是的,或者就像@Override
public void paint(Graphics g){
// calls paint from higher up the inheritance tree
super.paint(g);
g.drawRect(0, 0, 400, 200);
}
扩展了aClass
一样,这可能是某些类也扩展了Applet
。
例如Graphics
然后调用适合于g对象(从Graphics类创建)的drawRect方法;
是的。 class FooGraphics extends Graphics { ... }
类的公共合同的一部分。
以便执行aClase类时,绘制一个矩形,是这样吗?
只要Graphics
框架决定更新视图,它将调用此方法,该方法具有绘制矩形的作用。