Используя ключевое слово это с несколькими конструкторами в классе

Я не понимаю, что происходит, когда вы создаете объект Rational с помощью конструктора Rational(). В моей книге сказано, что он создаст объект Rational со значением 0, но внутренне хранится как 0/1. Как это (0) сохраняется как 0/1? Не является ли значение по умолчанию переменных экземпляра для num и den 0?

public class Rational{

  public Rational(){
      this(0);
  }

  public Rational(int n){
      this(n,1);
  }

  public Rational(int x, int y){
     num = x; 
     den = y; 
  }

  private int num;
  private int den; 
}

3 ответа

Решение

Внутри конструктора вы также можете использовать ключевое слово this для вызова другого конструктора из того же класса. Это называется явным вызовом конструктора. Источник

Если вы делаете

new Rational()

пустой конструктор будет вызван. Этот конструктор затем вызовет конструктор с одним аргументом, т.е.

new Rational(0)

который снова позвонит

new Rational(0,1)

Этот последний конструктор затем установит переменные экземпляра.


Для получения дополнительной информации посмотрите этот учебник.

Также интересно: спецификация языка Java

Семестр

Rational r = new Rational();

призывает

public Rational(){
    this(0);
}

который призывает

public Rational(int 0){
    this(0,1);
}

который призывает

public Rational(int 0, int 1){
   num = 0; 
   den = 1; 
}

это означает, что ваш конечный объект будет Rational(0,1);

this ссылается на текущий объект.

Но

this() вызовет текущий конструктор класса, который является конструктором по умолчанию.

this(val) вызовет конструктор класса с одним аргументом...

this(val1,val2) вызвать конструктор класса с двумя аргументами...

сейчас, если вы позвоните this() только, но вы написали свой конструктор таким образом, чтобы вы могли вызвать другие this(withArg). как показано ниже.. так что вы можете написать вложенный способ тоже.

public Rational(){
    this(0);
}

1) Ключевое слово this может использоваться для ссылки на переменную экземпляра текущего класса.

public Rational(int num, int den){
     this.num = num; 
     this.den = deb; 
  }

2) this () может использоваться для вызова текущего конструктора класса.

   public Rational(int num, int den){
             this(num);
             this.den = deb; 
          }

3) Ключевое слово this может использоваться для вызова метода текущего класса (неявно).

public Rational(){
        this.someMethod();
    }
Другие вопросы по тегам