Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将继承应用于非常相似的类,如BlueScrollBar和RedScrollBar?_Java_Oop_Inheritance_Processing - Fatal编程技术网

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

Java 如何将继承应用于非常相似的类,如BlueScrollBar和RedScrollBar?,java,oop,inheritance,processing,Java,Oop,Inheritance,Processing,我是编程中继承的初学者,我正在尝试使用继承设计设计RGB颜色混合器,它有3个类,红色滚动条、绿色滚动条和蓝色滚动条。我首先尝试创建一个名为ScrollBar的父类,并尝试将其扩展到3个类。但后来我意识到,对于每个类,我也需要更改它们的变量名,例如: class BlueScrollBar { //establish line x1 y1 and x2 y2 float blueLX1; float blueLY1; float blueLX2; float blueLY2;

我是编程中继承的初学者,我正在尝试使用继承设计设计RGB颜色混合器,它有3个类,红色滚动条、绿色滚动条和蓝色滚动条。我首先尝试创建一个名为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;
  }
}
class蓝条{
//建立线x1-y1和x2-y2
漂浮蓝lx1;
蓝漂1;
漂浮蓝lx2;
蓝漂2;
//确定方框、x、y、宽度和高度;
浮蓝X;
漂蓝;
浮动bW=20;
浮动bH=20;
布尔blueMouseOver=false;
布尔值blueboxlock=false;
浮动蓝偏移=0.0;
蓝十字线(intlx1,intly1,intlx2,intly2){
blueLX1=lx1;
blueLY1=ly1;
blueLX2=lx2;
blueLY2=ly2;
blubx=lx1;
blueBY=ly2/2;
}
作废提款(){

如果(mouseX>=blueBX bW/2&&mouseX=blueBY bH/2&&mouseY您的开始是正确的!创建一个名为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对应于要使用的特定颜色

(工业工程)

公共类滚动条{
int c=0;//如果用户给出的值不正确,则默认为红色
公共滚动条(INTC){

如果(c>=0&&c嗨,Andrew,如果你告诉我你将如何创建构造函数,那将非常有帮助。这意味着我将不得不创建我的自定义数据类型颜色?我还将如何以这种方式访问具有类似名称的变量?我仍然希望创建3个类,但扩展它们,而不是创建一个类,然后执行所有操作我已经在我的问题中添加了一些代码,希望能有所帮助,我也在用processing@user3620442查找适合所有人的通用变量名。不要使用
blueVariable
redVariable
。变量名在类中并不重要。如果需要,可以创建红色的BlueScrollBar。如果需要传入十六进制色码,也可以。
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
        }
    }
}