【问题标题】:What happens in this code snippet with the Applet class?这个带有 Applet 类的代码片段会发生什么?
【发布时间】:2019-06-17 09:04:50
【问题描述】:

谁能帮我理解这段代码发生了什么?

public class aClass extends Applet{
    public void paint(Graphics g){
        g.drawRect(0, 0, 400, 200);
    }
}

我的理解是这样的,我创建了一个名为 aClassclassinherit(因为它变成了一个daughter) Applet 方法属性 >;然后覆盖 paint 方法(继承自Applet),而这个方法 em> 期望 object 作为从 类创建的 参数(我们将其命名为 g Graphics,然后我们调用drawRect 方法,即适合 g object(它是从 Graphics );这样当aClase class被执行时,一个矩形被绘制就是像那样?

【问题讨论】:

  • “是这样吗?”或多或少。绘画有点像黑匣子/魔法。如果您有兴趣了解它的“工作原理”,可以查看Performing Custom PaintingPainting in AWT and Swing。 Applet 已经死了 - Why were applets deprecated in JDK 9? 最好不要浪费你的时间
  • 谢谢,我明白了,但这只是为了更好地理解一些事情在面向对象编程中是如何工作的,我想理解这个例子,因为我觉得它很好奇,尤其是关于 (图形 g)

标签: java oop applet


【解决方案1】:

Applet 是一种旧的、已弃用的技术,您应该考虑使用较新的技术,例如 Java Web Start。也就是说,除了一些术语之外,您的理解大多是正确的。

我创建了一个名为 aClass 的类,它继承(因为它成为了子类)Applet 类的方法和属性;

扩展一个类意味着您创建一个新的子类(在本例中为aClass),它基于超类(Applet)的公共合同和私有实现。 aClass 的行为方式应该高度尊重 Liskov substitution principle,这意味着在任何可以使用Applet 的地方,你也应该能够使用aClass。这意味着尊重AppletaClass 中的公共合同。

小程序类;然后覆盖paint方法(继承自Applet),

部分正确。 aClass覆盖 paint 意味着它将在aClass 的实例上调用paint 时调用,而不是Applet 中的默认定义。它不会覆盖,因为仍然可以调用此方法的super 实现。您还应该使用 @Override 注释来注释被覆盖的方法

@Override
public void paint(Graphics g){
    // calls paint from higher up the inheritance tree
    super.paint(g); 
    g.drawRect(0, 0, 400, 200);
}

此方法需要一个对象作为从类 Graphics 创建的参数(我们将其命名为 g),

是的,或者就像 aClass 扩展 Applet,这可能是一些也扩展了 Graphics 的类。

例如class FooGraphics extends Graphics { ... }

然后我们调用适合g对象(从Graphics类创建)的drawRect方法;

是的。 Graphics 类的公共合同的一部分。

这样在执行aClase类的时候,画一个矩形,是这样的吗?

每当Applet 框架决定更新视图时,它都会调用这个具有绘制矩形效果的方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-13
    • 2012-08-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多