适当的构造函数在Java中运行所有方法

时间:2017-09-05 15:03:04

标签: java class object methods constructor

我有这个类,需要知道需要哪个构造函数来创建一个可以立即使用其所有方法而没有错误的对象

public class Robot {
    private boolean fuelEmpty = true;
    private int roboID;
    private String greeting;
    private String securityProtocol;

//insert robot constructor here

public void destroyAllHumans(){
    while (fuelEmpty == false) {
        //robot begins to destroy all humans
    }
}
public int getRoboID(){
    return roboID;
}
public void greet(){
    System.out.println(greeting);
}
public void setSecurityProtocol(String proto){
    securityProtocol = proto;
}
}

例如,应该如下所示:

public Robot(int id, String greet) {
    roboID = id;
    greeting = greet;
}

或者这个:

public Robot(int id, String greet) {
    roboID = id;
    greeting = greet;
    fuelEmpty = false;
}

或:

public Robot(boolean full, int id, String greet, String proto) {
    roboID = id;
    greeting = greet;
    fuelEmpty = full;
    securityProtocol = proto;
}

需要哪些(或其他不同的东西)才能使所有其他方法无错误地运行?

2 个答案:

答案 0 :(得分:1)

您可以根据需要重载构造函数,重要的是 在创建新对象后,对象会被正确实例化...

一种方式可以是:

public Robot() {
    this(false, 0, "", "");
}

public Robot(int id) {
    this(false, id, "", "");
}

public Robot(boolean fuelEmpty, int roboID, String greeting, String securityProtocol) {
    this.fuelEmpty = fuelEmpty;
    this.roboID = roboID;
    this.greeting = greeting;
    this.securityProtocol = securityProtocol;
}

所以看看所有其他构造函数将在内部调用

public Robot(boolean fuelEmpty, int roboID, String greeting, String securityProtocol) 

这将为您提供保证,无论调用哪个构造函数,都可以完全创建Robot并且可以调用所有这些方法而不会崩溃

答案 1 :(得分:1)

解决方案的工作原理如下:

  • 你看看你的每个方法
  • 您检查每个方法正在使用的字段
  • 如果该字段的默认值(例如对象为null或布尔值为false),方法会中断,请更仔细检查

当您对所有方法执行此操作时,您会获得需要以某种方式初始化的字段列表。然后你可以继续前进并定义一个相应的构造函数。

但当然,这是错误的方法。

真正的答案是这样的:您不会将字段放入类中,因为可以。您添加它们是因为它们是必需的,以便此类可以实现您希望它实现的要求(职责)。含义:您专注于您的类应该提供的方法。然后,您将阐明实现这些方法所需的字段。

换句话说:您的课程中正好有您所需要的课程。如果你有未使用的字段 - 那么你就可以摆脱它们。