重写方法时,我们不是要重写整个方法吗?我试图覆盖 java.awt.Container.paint

When Overriding a method, don't we override whole method? I tried to override java.awt.Container.paint

我有一个关于覆盖的问题。我认为重写一个方法就是重写那个方法。但是,当我研究如何覆盖时,我有一个疑问。假设我写了下面的代码:

import java.applet.Applet;

import java.awt.Graphics;

public class guitryings_2 extends Applet{

    public void paint( Graphics g )
    {
        g.drawString("Hi", 25, 75);
        showStatus("Deneme");
    }

}

如果paint方法只包含g.drawString("Hi",25,75);并且 showStatus 不存在,我收到消息 'Applet Started'.

如果覆盖意味着重写整个方法,当我只写 g.drawStrings 而没有时,这意味着我没有定义任何将在下面显示的字符串。那么 'Applet Started' 文本不应该消失吗?

实际上,您正在覆盖 java.awt.Container.paint(Graphics g),因为 AppletContainer 之前的层次结构中的任何 class 都没有提供它们自己的 paint() 实现。

这是您要覆盖的方法(而且,是的,方法总是作为一个整体被覆盖——您不能只覆盖方法的一部分。您唯一能做的就是调用被覆盖的方法,例如 super.paint(g)).

但是,java.awt.Container.paint() 不包含任何 Applet 特定代码, 因此,您看到的消息 (Applet started) 显然是由 Applet 容器打印的 - 就像浏览器(它仍然对其状态栏具有主要控制权)或 Applet 查看器一样。

顺便说一句,请注意小程序正在被弃用,一些浏览器已经停止使用所需的本机 API 以完全支持小程序。