[英]Pass argument in main method when class extends another class in Java
[英]Extends Frame class in main method's class
今天,当我阅读讲义时,我不明白在这种情况下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方法内部或作为QueenApl
类的实例变量创建Frame
? 像这样:
Frame someobj = new Frame(argument or none);
为什么可以直接使用getToolkit()
而不附加classname.
在前面吗? 是因为此方法在Frame
类中并且由于主方法类继承了Frame
,我们可以直接使用该方法?
extends
是代表继承的关键字。
为什么主方法类扩展到Frame? 为什么不在主方法内部或作为QueenApl类的实例变量创建Frame而不是某些东西= new Frame(argument或none)?
不同之处在于,当您extend Frame class
时,会在您的类中获取其方法。 即,您可以覆盖QueenApl类的frame类中声明的方法。
为了更好地理解,下面是一个著名的Animal
示例:
class Animal {
public void eat(){
//animal eat
}
class Dog extends Animal {
@override
public void eat(){
//dog specific eat
}
}
}
请注意,您已经重写了Dog类中的eat方法,以实现特定于dog的eat操作。
2)通过为什么可以直接使用getToolkit()而不附加类名的方式。 在前面吗? 是因为此方法在Frame类中并且由于主方法类继承了Frame,所以我们可以直接使用该方法?
好吧,因为您的getToolKit()
方法是从Frame clas
继承的,因此您无需使用实例进行调用。
您实际上不必扩展Frame,这很方便。 将您的代码与此不扩展框架的代码进行比较。 相反,您需要具有“框架”字段。
像setSize()和getToolkit()这样的调用方法现在需要在Frame字段前加上前缀,因为它不再是Frame。 您的代码不需要它们,因为这是一个框架,您的类可以调用非私有祖先类的方法。
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);
}
}
它继承了JFrame,因此可以覆盖paint方法,从而将图像“卡片”绘制到屏幕上。 如果不重写paint方法,将无法访问图形对象以绘制到JFrame。
paint方法带有java.awt.Graphics参数,该参数允许您绘制到JFrame。 覆盖“ paint”方法是获取Graphics类以绘制到JFrame的唯一方法。
“ getToolkit”是从JFrame继承的,直接继承到您的“ QueenApl”类中。 因此,“ getToolkit”从技术上讲现在是“ QueenApl”类的成员。 因此,在方法调用之前,无需添加成员/类名。
如果你真的不明白我的意思,当我说“继承”或“扩展”,看看这个 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.