我有一个关于覆盖的问题。我认为重写一个方法就是重写该方法。但是,当我研究如何覆盖时,我产生了疑问。假设我编写了以下代码:
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 已启动”。
如果 override 意味着重写整个方法,那么当我只写 g.drawStrings 而没有时,这意味着我没有定义任何下面将显示的字符串。那么“Applet Started”文本不应该消失吗?
最佳答案
实际上,您正在重写java.awt.Container.paint(Graphics g)
,因为Applet
和层次结构中直到Container
的任何类都没有。 code> 提供自己的 paint()
实现。
这是您要重写的方法(是的,方法总是作为一个整体被重写 - 您不能仅重写方法的一部分。您唯一能做的就是调用被重写的方法,例如 super.paint(g)
).
但是,java.awt.Container.paint()
不包含任何Applet特定代码,
因此,您看到的消息(Applet已启动
)显然是由Applet容器打印的 - 就像浏览器(仍然对其状态栏具有主要控制权)或Applet查看器一样。
顺便说一句,请注意,Applet 正在被弃用,并且某些浏览器已经完全停用了支持 Applet 所需的 native API。
关于java - 当重写一个方法时,我们不是重写整个方法吗?我尝试覆盖 java.awt.Container.paint,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37131239/