[英]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.