2014-06-20 183 views
-1

我想當你從另一個對象擴展一個對象時,那個對象就會接收到所有的變量,這些變量的定義以及那個對象的方法。所以,當我有這樣的代碼「擴展」是否也擴展變量?

import javax.swing.*; 
import java.awt.*; 

public abstract class Object extends JComponent{ 
    private int xpos; 
    private int ypos; 
    private int height; 
    private int width; 
    private double rotate; 
    private Rectangle rect; 

    public Object(int p1, int p2, int w, int h, double r){ 
     this.xpos = p1; 
     this.ypos = p2; 
     this.width = w; 
     this.height = h; 
     this.rotate = r; 
     rect = new Rectangle(xpos, ypos, width, height); 
    } 
} 

與原始對象,然後另一個對象是這樣的:

import javax.swing.*; 
import java.awt.*; 

public class Block extends Object{ 

    public Block(int p1, int p2, int p3, int p4, double r) { 
     super(p1, p2, p3, p4, r); 

    } 

    public void paintComponent(Graphics g){ 
     Graphics2D gd = (Graphics2D) g; 
     gd.setColor(Color.BLUE); 
     gd.draw(rect); 
    } 

} 

爲什麼不矩形「矩形」正在擴大了嗎?在java中我很新,所以請繼續閱讀XD

+0

_爲什麼不是矩形「矩形」被擴展了?_你認爲它在哪裏? –

+0

你爲什麼重新定義'Object'類?你知道這會給多個問題嗎? –

+0

爲什麼?有沒有一個對象類?如果有我不知道它 – MagnusCaligo

回答

0

擴展一個類時,可以訪問公共和受保護的方法和變量。現在,rect是一個私有變量。爲了使其對擴展對象免費,只需使其受保護或提供getRect()方法以允許訪問。

0

它實際上是擴展但不可訪問,因爲您的變量rect定義爲私有。要在子類中訪問矩形應該是保護

或者你也可以爲rect創建getter和setter方法。

3

rectObject中被標記爲私人。所以它只對你的Object類的實例可見。即使是兒童班,在實施過程中也看不到它。你可以做兩件事:

1)在Object中爲它創建一個getter方法。這種方法是公開的,所以任何其他類,包括你的類Block,都可以看到它。

public Rectangle getMyRect() { 
    return rect; 
} 

2)或將其標記爲受保護或默認(無訪問修飾符)。

protected Rectangle rect; // this way... 
Rectangle rect; // ... or this way 

P.S.不要命名類Object。如果班級定義在不同的包中,它將起作用,但類Object具有特殊含義 - 所有班級的最高級父級 - 並會混淆人。

-1

變量「rect」不會被擴展。 「擴展」意味着你將這個類作爲父類。所以塊類將繼承父類包含的所有功能。所以block會得到所有的方法,你也可以重寫方法。由於rect是一個私有變量,除非您公開它,否則它不會被塊類看到。 Extends基本上允許類繼承父類的屬性,方法和屬性,但不支持私有變量。希望有所幫助。

0

瞭解有關訪問說明符的更多信息。私人成員變量只能在類中訪問。因此,即使您有一個擴展Rect的類,它仍然只在Object中可見。也不要使用類名'Object'。它是超類,所有其他類EXTEN

0

擴展和訪問是兩回事....

在你的情況下,超類私有變量不可訪問。您可以擴展超類的功能,但訪問方法和變量取決於超類訪問修飾符。