今天当我阅读我的讲义时,我不明白extends
在这种情况下的目的是什么。请考虑以下代码:
import java.net.*;
import java.awt.*;
public class QueenApl extends Frame{ // Why extends??
Image card;
public static void main(String[] args){
QueenApl f = new QueenApl();
f.show();
}
public QueenApl(){
setSize(400,400);
try{
URL u = new URL("file:/c:/windows/desktop/carn4.jpg");
card=getToolkit().getImage(u); //Why getToolkit can be used directly?
}catch(MalformedURLException e){
System.out.println("Error in URL!"); System.exit(1);
}
}
public void paint(Graphics g){
g.drawImage(card,120,50,this);
}
}
为什么main方法类会扩展Frame
类?为什么不在main方法中创建Frame
或在类QueenApl
的实例变量中创建?{1}}?像这样:
Frame someobj = new Frame(argument or none);
为什么可以直接使用getToolkit()
而不在其前面附加classname.
?是因为此方法在类Frame
中,并且由于主方法类继承Frame
,我们可以直接使用该方法吗?
答案 0 :(得分:2)
extends
是表示继承的关键字。
为什么main方法类扩展为Frame?框架为什么不是 在main方法内部创建或作为类的实例变量创建 QueenApl Frame something = new Frame(参数或无)?
不同之处在于你extend Frame class
在课堂上获得了它的方法。即,您可以覆盖QueenApl类中的帧类中声明的方法。
为了更好地理解这是一个着名的Animal
示例:
class Animal {
public void eat(){
//animal eat
}
class Dog extends Animal {
@override
public void eat(){
//dog specific eat
}
}
}
请注意,您已经在Dog类中重写了eat方法,以实现狗特定的吃操作。
好吧那是因为你的2.)顺便说一句,为什么可以直接使用getToolkit()而不附加类名。在它面前?是因为这个方法在课堂上 框架和自主方法类继承Frame,我们可以使用 方法直接?
getToolKit()
方法是从Frame clas
继承的,所以你不需要用实例来调用它。
答案 1 :(得分:2)
你真的不需要扩展Frame,它只是方便。 将您的代码与不扩展Frame的代码进行比较。相反,您需要一个Frame字段。
调用setSize()和getToolkit()之类的方法现在需要以Frame字段作为前缀,因为此不再是Frame。您的代码不需要它们,因为 this 是一个框架,您的类可以调用非私有祖先类的方法。
import java.net.*;
import java.awt.*;
public class QueenApl {
Image card;
Frame frame;
public static void main(String[] args){
QueenApl f = new QueenApl();
}
public QueenApl(){
frame = new Frame();
frame.setSize(400,400);
try{
URL u = new URL("file:/c:/windows/desktop/carn4.jpg");
card=frame.getToolkit().getImage(u);
} catch(MalformedURLException e){
System.out.println("Error in URL!"); System.exit(1);
}
frame.show();
}
public void paint(Graphics g){
g.drawImage(card,120,50,frame);
}
}
答案 2 :(得分:1)
它继承了JFrame,因此它可以覆盖paint方法,允许将图像“card”绘制到屏幕上。如果不重写paint方法,就无法访问要绘制到JFrame的图形对象。
paint方法附带一个java.awt.Graphics参数,它允许您绘制到JFrame。覆盖“paint”方法是获取Graphics类以绘制到JFrame的唯一方法。
“getToolkit”从JFrame继承,直接进入“QueenApl”类。因此,“getToolkit”现在在技术上是“QueenApl”类的成员。因此,在方法调用之前,不得附加任何成员/类名。
如果您在说“继承”或“延伸”时并不理解我的意思,请查看this。