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