Использование final, super и this

Использование final

Нельзя создать подкласс для класса, объявленного со спецификатором final:

// класс ConstCourse не может быть суперклассом

final class ConstCourse {/*код*/}

// следующий класс невозможен

class BaseCourse extends ConstCourse {/*код*/}

Использование super и this

Ключевое слово super используется для вызова конструктора суперкласса и для доступа к члену суперкласса. Например:

super(список_параметров);/* вызов конструктора суперкласса

с передачей параметров или без нее*/

super.id = 71; /* обращение к атрибуту суперкласса */

super.getId(); // вызов метода суперкласса

Вторая форма super используется для доступа из подкласса к переменной id суперкласса. Третья форма специфична для Java и обеспечивает вызов из подкласса переопределенного метода суперкласса, причем если в суперклассе этот метод не определен, то будет осуществляться поиск по цепочке наследования до тех пор, пока метод не будет найден.

Каждый экземпляр класса имеет неявную ссылку this на себя, которая передается также и методам. После этого метод «знает», какой объект его вызвал. Вместо обращения к атрибуту id в методах можно писать this.id, хотя и не обязательно, так как записи id и this.id равносильны.

clip_image001

Следующий код показывает, как, используя this, можно строить одни конструкторы на основе других.

// пример # 3 : this в конструкторе: Point2D.java, Point3D.java, Point4D.java

package chapt04;

public class Point2D {

private int x, y;

public Point2D(int x, int y) {

this.x = x;//this используется для присваивания полям класса

this.y = y;//x, y, значений параметров конструктора x, y, z

}

}

package chapt04;

public class Point3D extends Point2D {

private int z;

public Point3D(int x, int y, int z) {

super(x, y);

this.z = z;

}

public Point3D() {

this(-1,-1,-1);// вызов конструктора Point3D с параметрами

}

}

package chapt04;

public class Point4D extends Point3D{

private long time;

public Point4D(int x, int y, int z, long time) {

super(x, y, z);

this.time = time;

}

public Point4D() {

// по умолчанию super();

}

}

В классе Point3D второй конструктор для завершения инициализации объекта обращается к первому конструктору. Такая конструкция применяется в случае, когда в класс требуется добавить конструктор по умолчанию с обязательным использованием уже существующего конструктора.

Ссылка this используется в методе для уточнения того, о каких именно переменных x, y и z идет речь в методе, а конкретно для доступа к переменным класса из метода, если в методе есть локальные переменные с тем же именем, что и у класса. Инструкция this() должна быть единственной в вызывающем конструкторе и быть первой по счету выполняемой операцией.

Вы можете следить за любыми ответами на эту запись через RSS 2.0 ленту. Вы можете оставить ответ, или trackback с вашего собственного сайта.

Оставьте отзыв

XHTML: Вы можете использовать следующие теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

 
Rambler's Top100