Записки программиста Программирование и не только

1Ноя/120

[Java] this, super

1. Как-то я писал, что не понимаю, зачем вызывать конструктор в конструкторе через this.
Разобрался.
Это для укорачивания кода.

Типа можно так:

class Point {
    int х, у; 
    Point(int х, int у) { 
        this.x = х; 
        this.у = у; 
    }
  
    Point() { 
        this.x = -1; 
        this.у = -1; 
    } 
}

А можно короче:

class Point {
    int х, у; 
    Point(int х, int у) { 
        this.x = х; 
        this.у = у; 
    }
  
    Point() { 
        this(-1, -1);   //конструктор вызывает другой конструктор
    } 
}

Есть одно ограничение на вызов одного конструктора из другого. Такой вызов должен быть первым оператором в вызывающем конструкторе.

2. super
Данная функция служит для вызова конструктора базового класса. Используется, если базовый класс, например, не имеет конструктора по умолчанию

Пример

class X {
   X(int a) { ... }
   ...
}

class Y extends X {
    Y() {
        super(0);
        ...
    }
   ...
}

Также super может использоваться и для явного вызова методов базового класса. Это необходимо, если некоторый метод базового класса был переопределен в порожденном классе.

Пример

class Base {
    int x = 1;
    long y;
    Base(long y) {
        this.y = y;
    }
    Base() {
         this(0);   // вызов конструктора Base(long y)
    }
    public long f() {
        return x*y;
    }
}

class Derived extends Base {
    String name = "";
    Derived(String name, long par) {
          super(par);   // вызов конструктора Base(long y)
          this.name = name;
    }
    public long g(int r) {
         return r+super.f();   // вызов метода f() класса Base
    }
    public long f() {
          x++;
          return 2*y;
    }
}
Комментарии (0) Пинги (0)

Пока нет комментариев.


Leave a comment

Нет обратных ссылок на эту запись.