我如何将继承应用于非常相似的类,如BlueScrollBar和RedScrollBar?

时间:2015-05-13 20:01:41

标签: java oop inheritance processing

我是编程继承的初学者,我试图使用继承设计在这里设计RGB颜色混合器,它有3个类,RedScrollBar,GreenScrollBar和BlueScrollBar。我首先尝试创建一个父类,称为ScrollBar,并尝试将其扩展为3个类。但后来我意识到每个班级,我也需要改变他们的变量名,例如:

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,我可以直接复制粘贴相同的代码来创建一个新类,但我需要更改包含单词&#39; blue&#39;的所有变量。到了红色&#39;或者&#39;绿色&#39;它的工作原理。什么是更好的方法呢?任何帮助将不胜感激。

1 个答案:

答案 0 :(得分: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对应于你想要使用的特定颜色。

ie)

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
        }
    }
}