- •Лекция №2
- •2.1. Оператор instaceof
- •boolean flag;
- •2.2. Конструкторы
- •свойство
- •свойство конструкторы
- •2.3. Уровни доступа конструкторов
- •class A {
- •Создание объекта singleton-а:
- •2.4. Ключевое слово this
- •class A {
- •2.5. Default конструктор (конструктор с уровнем доступа «пакет»)
- •2.6. Перегрузка методов
- •Замечание. Если перегружаемый метод достался классу от класса предка, то допускается объявление метода
- •2.7. Перекрытие методов
- •class A {
- •2.8. Преобразование типов между классами
- •После восходящего преобразования типов те поля и методы потомка, которые отсутствуют в классе
- •Однако, никакого усечения объекта не происходит, при обратном, нисходящем преобразовании типов, которое
- •Нисходящее преобразование типов может осуществляться от класса предка к классу, который находится в
- •class A {}
- •Замечание. При нисходящем и восходящем преобразованиях типов фактически тип объекта (т.е. класс, экземпляром,
- •О том, что подобные манипуляции с объектами и объектными переменными справедливо называть преобразованием
- •Замечание. Нисходящее преобразование типов всегда должно выполняться явно с использованием оператора преобразования типов.
- •2.9. Влияние уровня доступа конструктора на возможность наследовать класс
- •конструктор
- •конструктор конструкторы
- •2.10.Инициализация нестатических полей
- •class A {
- •В блоках инициализации не допускается использование в правых частях присваиваний неинициализированных полей.
- •Замечание. Присваивание полю значения в блоке инициализации, который предшествует объявлению поля ошибки не
- •Замечание. В блоках инициализации можно инициализировать статические поля, при этом их значения будут
- •2.11. Инициализация статических полей
- •2.12.Порядок вызова блоков инициализации и конструкторов при создании объекта
- •1)вызываются статические блоки инициализации всех классов от предка к потомку (от A до
- •class A {
- •2.13. Значение полей по умолчанию
- •Замечание. Вплоть до первой инициализации поля его значение равно значению по умолчанию начиная
- •Выше объявления поля можно производить его инициализацию в блоках инициализации, но нельзя использовать
- •Замечание. Элементы массивов являющихся в java объектами, можно рассматривать как поля таких объектов,
- •2.14. Абстрактные классы
- •Замечание. Модификатор abstract должен стоять перед ключевым словом class, но может стоять после
- •2.15.Вызов конструкторов в классе
- •Замечание. Из конструктора может быть вызван только один конструктор из оставшихся. Не допускается
- •Замечание. В коде класса можно создавать экземпляры этого класса с помощью оператора new,
- •2.16.Конструктор без параметров
- •class A {
- •2.17. Уровни доступа класса
- •2.18.Обращение к статическим полям и методам
- •2.19. Доступ к переменной this
- •2.20. Перегрузка статических методов при наследовании
- •2.21. Перекрытие статических методов при наследовании
- •2.22. Абстрактные статические методы
- •2.33. Доступ к перекрытым методам родительского класса
- •2.34. Наследование абстрактного класса
- •2.35. Объектные переменные абстрактных классов
- •abstract class A {
- •Замечание. Абстрактные классы могут быть интерпретированы как интерфейсы, у которых часть методов уже
- •2.36. Уровни доступа и перекрытие методов
- •2.37. Уровни доступа элементов классов
- •уровень
- •2.38. Модификатор final
- •Практические задания
- •2. Создать класс "Вектор" для хранения ссылок на объекты.
- •3. Создать класс "Матрица".
2.14. Абстрактные классы
Абстрактный метод – это метод не имеющий реализации. Такие методы должны быть объявлены с модификатором abstract.
Если класс содержит хотя бы один абстрактный метод, он также должен быть объявлен с модификатором abstract.
public abstract class test {
abstract void someMethod();
}
Замечание. Модификатор abstract должен стоять перед ключевым словом class, но может стоять после модификатора уровня доступа класса или метода.
Замечание. Для классов не допускается сочетание abstract с модификатором final. Для методов не допускается сочетание abstract с модификаторами final, private и static.
2.15.Вызов конструкторов в классе
Вкоде класса конструктор класса может быть вызван только из конструктора и только с помощью ключевого слова this, за которым в скобках должны следовать параметры соответствующего конструктора, причем такой вызов должен быть первой строкой в конструкторе.
Замечание. Из конструктора может быть вызван только один конструктор из оставшихся. Не допускается вызов сразу нескольких конструкторов, например двух.
class A { A() {
this(3);
this(3.); // ошибка: call to this must //be first statement in constructor
}
A(int x) {} A(float x) {}
}
Замечание. В коде класса можно создавать экземпляры этого класса с помощью оператора new, при этом всегда будет происходить выполнение соответствующего конструктора.
class A {
A(int x) {...}
public void someMethod() { A a = new A(3);
}
}
2.16.Конструктор без параметров
вконтексте наследования
Если в классе определен хотя бы один конструктор, имеющий один или более параметров, то компилятор в код класса конструктор без параметров не добавляет.
Поэтому потомок такого класса обязан включать в себя конструктор (с параметрами или без), причем один из его конструкторов должен вызывать конструктор с параметрами предка через конструкцию super. Это связано с тем, что конструктор потомка всегда вызывает конструктор предка, если же такой вызов не прописан явно, компилятор добавит в код конструктора потомка вызов конструктора без параметров предка.
class A {
A(int x) {}
}
//код класса C написан без ошибок: class С extends A {
С() {super(0);}
}
//ошибка компиляции
//в классе A отсутствует конструктор A() class B extends A {
B() {}
}
2.17. Уровни доступа класса
Класс может иметь два уровня доступа:
открытый - public (имя класса предваряется модификатором public)
по умолчанию – default (модификатор уровня доступа не ставится). Каждый отдельный java-файл может содержать несколько классов, но только один из них может быть public (все классы в файле могут быть default).
Замечание. Если класс имеет уровень доступа по умолчанию, то вне пакета в котором он определен, данный класс виден не будет.
2.18.Обращение к статическим полям и методам
Встатических методах нельзя вызывать нестатические методы и использовать нестатические переменные, т.к., статический метод является принадлежностью класса (который один), а нестатические методы и поля принадлежат объектам этого класса (которых может быть много).
2.19. Доступ к переменной this
Статические методы не имеют доступа к переменной this.
class A { int x;
public static void method() { // ошибка компиляции: this.x = 3;
}
}