2015-05-13 55 views
-1

我是一個初學者在編程繼承,我試圖設計一個RGB顏色混合器在這裏使用繼承設計,它有3個類,RedScrollBar,GreenScrollBar和BlueScrollBar。我試着先創建一個父類,名爲ScrollBar,並試圖將其擴展到3個類。但後來我意識到每個類,我需要改變自己的變量名也是如此,例如:我將如何將繼承應用到非常類似的類,如BlueScrollBar和RedScrollBar?

class BlueScrollBar { 
    //establish line x1 y1 and x2 y2 
    float blueLX1; 
    float blueLY1; 
    float blueLX2; 
    float blueLY2; 

    //establish the box, x, y, width and height; 
    float blueBX; 
    float blueBY; 
    float bW = 20; 
    float bH = 20; 

    boolean blueMouseOver = false; 
    boolean blueBoxLocked = false; 

    float blueYOffset = 0.0; 

    BlueScrollBar(int lx1, int ly1, int lx2, int ly2) { 
    blueLX1 = lx1; 
    blueLY1 = ly1; 
    blueLX2 = lx2; 
    blueLY2 = ly2; 

    blueBX = lx1;  
    blueBY = ly2/2; 
    } 

    void draw(){ 
    if(mouseX >=blueBX-bW/2 && mouseX <=blueBX+bW/2 && mouseY >=blueBY-bH/2 && mouseY <=blueBY+bH/2){ 
     fill(0); 
     blueMouseOver = true; 
    } else { 
     fill(255); 
     blueMouseOver = false; 
    } 

    line(blueLX1, blueLY1, blueLX2, blueLY2); 
    rect(blueBX, blueBY, bW, bH); 

    if (blueBY <= blueLY1 || blueBY >= blueLY2) { 
     blueBoxLocked = false; 
    } 

    } 

    void mousePressed(){ 
    if(blueMouseOver){ 
     blueBoxLocked = true; 
     blueBY = mouseY - blueYOffset; 
    } else { 
     blueBoxLocked = false; 
    } 
    } 

    void mouseDragged(){ 
    if(blueBoxLocked){ 
     blueBY = mouseY - blueYOffset; 
    } 
    } 

    void mouseReleased(){ 
    blueBoxLocked = false; 
    } 
} 

,爲RedScrollBar或GreenScrollBar,我可以從字面上複製粘貼相同的代碼來創建一個新的類,但我需要將包含單詞「藍色」的所有變量更改爲「紅色」或「綠色」以使其工作。什麼是更好的方法來做到這一點?任何幫助,將不勝感激。

+0

變量名不以階級關係。如果需要,可以創建一個紅色的BlueScrollBar。如果你需要傳入十六進制顏色代碼,那也沒關係。 – Ryan

回答

1

你是在正確的軌道上開始!創建一個名爲Scrollbar的類,並在該類的構造函數中設置顏色(如果只想從某組顏色中選擇,則通過枚舉)。這樣你就有一個班級來解決你的問題。

我假設你知道如何構造一個構造函數,但如果你不評論這個答案,我會告訴你。

編輯1:

好了,所以當你在Java中創建一個類的構造函數(用於創建一個類的對象的函數很奇特的名字)爲您生成,如果你不顯式定義。每當你調用MyClass test = new MyClass();很可能你只是使用自動生成的構造函數(不需要將參數傳遞給它)。

但是,您將需要自己的自定義構造函數,因此您可以這樣做。

public class ScrollBar{ 
    Color color; 
    //your constructor. 
    public ScrollBar(Color c){ 
     this.color = c; 
    } 
} 

話雖這麼說,我不相信你是如何實現的顏色或什麼框架你是在工作,所以拿上面的代碼用一粒鹽。

請注意,如果您創建自己的構造函數,則不會爲您生成默認的構造函數。因此,這會給你一個錯誤:

ScrollBar test = new ScrollBar(); // :(error 
ScrollBar test = new ScrollBar(RED); // :) good 

編輯2:

對不起誤導你的方式。我試圖讓我的代碼保持在一般以上,因爲我不知道你是如何處理程序中的顏色的。然而,你試圖實現紅/藍/綠將與這種方法一起工作。如果你真的只想要你列出的三種顏色,你可以傳遞一個整數給你的構造函數,其中0,1,2對應於你想要使用的特定顏色。

即)

public class ScrollBar{ 

    int c = 0; //default to red if the user gives a bad value 

    public ScrollBar(int c){ 
     if(c >=0 && c <=2){ //check bounds 
      this.color = c; 
     } 
    } 

    public setColor(){ 
     if(this.color == 0){ 
      //do something with red 
     } 
     else if(this.color == 1){ 
      //do something with blue 
     } 
     else{ 
      //do something with green 
     } 
    } 
} 
+0

嗨安德魯,它會非常有幫助,如果你告訴我你將如何創建構造函數 – tmvnty

+0

非常感謝你安德魯。所以這意味着我將不得不創建自定義數據類型Color?另外我怎麼會這樣訪問類似名稱的變量?我仍然想創建3個分類,但擴展他們,而不是創建一個類,並從中做一切。我已經添加了一些代碼給我的問題希望有幫助,我也正在處理這個 – tmvnty

+0

@ user3620442找到適合所有的通用變量名稱。不要使用'blueVariable'或'redVariable' ... – plalx

相關問題