0

我很难找到我需要的东西,并弄清楚如何要求它,所以请考虑一下:

public class Environment {
    int x = 0;
    int y = 0;
    Operations op = new Operations();

    public Environment(){
        Operations.changeSuper();
    }
}

和:

public class Operations extends Environment {
    public void changeSuper(){
        x++;
        y--;
    }
}

这是我已经尝试过的简单表示。但是我不认为在环境中初始化操作是正确的,因为它会导致构造函数循环。但如果我不这样做,那么当我尝试调用 changeSuper() 时会得到空指针。

这是使用扩展的正确方法吗?谁有更好的方法从类文件中抽象方法。

长话短说,我想将方法​​移出类文件,但仍然允许它们影响它的局部变量

4

4 回答 4

2

Environment不是Operations..所以不。听起来你需要作曲。而且你应该让你的班级Operation没有Operations

所以有这样的事情:

public class Environment {
    int x = 0;
    int y = 0;
    Operation op ;

    public Environment(){
         op=new Operation(this);

    }

    public void changeEnvironment() {}
    public void incrementX(){}
    public void incrementY() {}
}

和:

public class Operation   {
    Environment e;
    public Operation(Environment e){
        this.e = e;
        e.incrementX();
        e.decrementY();
    }
    public void changeEnvironment()
    {   
       e.changeEnvironment() ;
    }
}

如果仅在 中进行更改Environment,则它使维护更容易,同时也保留了封装性。

于 2012-11-02T00:25:02.520 回答
1

不能通过继承Operations引用Super Class 中的子类。相反,制作为抽象类并定义为抽象方法,如下所示:EnvironmentchangeSuper

 public abstract class Environment {
    int x = 0;
    int y = 0;
    public abstract void changeSuper();

    public Environment(){
     changeSuper();
    }
  }

然后定义Operations类来扩展Environment和实现changeSuper()方法如下:

  public class Operations  extends Environment {
     @Override
     public void changeSuper(){
           x++;
           y--;
     }
  }

现在,如果您在类中创建一个main方法:Operations

public static void main(String[] args) {
    Environment env = new Operations();
    System.out.println("x="+env.x+"&y="+env.y);//<- it will print x=-1&y=-1
}
于 2012-11-02T00:30:37.733 回答
0

我相信 changeSuper 应该是静态的。

于 2012-11-02T00:19:10.313 回答
0

我认为您不希望运营兼而有之

  • 环境的一个子类型和

  • Environment 的实例变量

如果 Environment 是 Operations 的超类型 - 它们将自动共享非私有实例变量(不需要一个调用另一个)。如果不是超类型,那么通过直接访问实例变量来破坏封装是不好的做法。

试试这个:

public class Environment {
    int x = 0;
    int y = 0;

    public Environment(){
    }
}

and:

public class Operations extends Environment {
    public void changeState(){
        x++;
        y--;
    }
}

and:

public class MasterControl {
   Operations op = new Operations();
   op.changeState();
}

或者

public class Environment {
    int x = 0;
    int y = 0;
    Operations op = new Operations();

    public Environment(){
        op.changeState();
    }

    public int getX() {return x;}
    public setX(int x) {this.x = x;}
    public int getY() {return y;}
    public setY(int x) {this.y = y;}

}

和:

public class Operations {
    public void changeState(Environment env){
        env.setX(env.getX+1);
        env.setY(env.getY-1);
    }
}

在这里,Environment 负责存储环境状态并使其可供其他对象使用。在这里,Operations 正在执行一项专门的操作来修改环境状态。

凯?

于 2012-11-02T03:13:43.290 回答