toString () и методы доступа - PullRequest
1 голос
/ 04 марта 2012
public class Fan {
        public static void main(String[] args){
Fan fan1 = new Fan();
        fan1.setSpeed(FAST);
        fan1.setRadius(10);
        fan1.setColor("yellow");
        fan1.setOn(true);
        System.out.println(fan1.toString());        
    }

    // fan speed variables
    final static int SLOW = 1;
    final static int MEDIUM = 2;
    final static int FAST = 3;

    // Other fan variables
    private int speed;
    private boolean on; // true means on
    private double radius;  // radius of fan
    String color;

    // No-arg constructor
    public void Fan(){
        speed = SLOW;
        on = false;
        radius = 5;
        color = "blue";
    }

    // Mutator methods
    public void setSpeed(int newSpeed){
        if(newSpeed < 0)
            System.out.println("Illegal speed!");
        else
            speed = newSpeed;
    }

    public void setOn(boolean newOn){
         on = newOn;
    }

    public void setRadius(int newRadius){
        if(newRadius < 0)
            System.out.println("Illegal radius!");
        else 
            radius = newRadius;
    }

    public void setColor(String newColor){
        color = newColor;
    }

    // Accessor methods
    public int getSpeed(){
        return speed;
    }

    public boolean getOn(){
        return on;
    }

    public double getRadius(){
        return radius;
    }

    public String getColor(){
        return color;
    }

    // toString method to output Fan data
    public String toString(){
        if(on = false)
            return "Fan is off.";
        else
            return "Fan Properties:\n" + "Fan speed: " + speed + "\n"
            + "Color: " + color + "\n"
            + "Radius: " + radius + "\n";
    }
}

Приведенный выше фрагмент кода прост, но мне было интересно, как метод toString использует переменную on, хотя я не предоставлял параметры для этого метода.Кроме того, почему нам не нужно вызывать методы get в главном классе, а нужно только вызывать методы set?(пожалуйста, объясните, как каждый метод вызывает друг друга до окончательного результата)

Большое спасибо!

Ответы [ 2 ]

1 голос
/ 04 марта 2012

Насколько вы находитесь в теле этого класса, вы можете получить доступ ко всему (кроме статического не может получить доступ к нестатическому).Это означает, что вы можете легко устанавливать и получать переменные, подобные этим:

var = <value>;
System.out.println(var);

Однако никто не мешает вам использовать методы доступа - getter и setters.Это просто не требуется.

Последнее замечание:

if(on = false)

Это всегда будет неудачей - оно присваивает значение false, а затем проверяет вновь присвоенное значение (которое является ложным).Вы должны проверить на равенство здесь.Вот так:

if(on == false)

Или еще лучше:

if(!on)
0 голосов
/ 04 марта 2012

Я просто скопировал и вставил ваш код в новый файл и скомпилировал его. Он скомпилирован и запущен. Выход был

$ java Fan
Fan Properties:
Fan speed: 3
Color: yellow
Radius: 10.0

Это потому, что сравнение в вашем toString методе неверно. Это должно быть следующим:

public String toString(){
    if(on)
        return "Fan Properties:\n" + "Fan speed: " + speed + "\n"
        + "Color: " + color + "\n"
        + "Radius: " + radius + "\n";
    else
        return "Fan is off.";
}
...