
- •Программирование на Java
- •Глава 1 Введение в java. Основы языка.
- •Тема 1.1 Язык программирования java.
- •Тема 1.2 Состав пакета Java2.
- •Тема 1.3 Настройка среды окружения.
- •Тема 1.4 Структура Java-программы.
- •Тема 1.5 Набор текста, запуск и компиляция простейшей программы.
- •Тема 1.6 Подробное рассмотрение кода простейшей программы.
- •Тема 1.7. Создание программы в разных средах разработки.
- •Тема 1.8 Лексические основы языка
- •Тема 1.9 Элементарные типы данных.
- •Тема 1.10 Преобразование типов.
- •Арифметические операции
- •Операции сравнения
- •Тема 1.11 Кoнсольный ввод с помощью класса java.Util.Scanner
- •Тема 1.12 Классы-оболочки
- •Тема 1.13 Автоупакока и автораспаковка.
- •Тема 1.14 Операторы
- •1.14.1 Блок
- •1.14.2 Условный оператор if
- •1.14.4 Оператор цикла while
- •1.14.5 Оператор цикла do-while
- •1.14.6 Оператор цикла for
- •1.14.7 Оператор continue и метки
- •1.14.8 Оператор break
- •1.14.9 Оператор варианта switch
- •Тема 1.15 Статический импорт
- •Тема 1.16 Класс Math
- •Задания
- •Тема 1.17 Псевдослучайные числа
- •Тема 1.18 Генерация случайных чисел
- •Тема 1.19 Массивы в Java
- •1.19.1 Объявление и заполнение массива
- •1.19.2 Сортировка массива
- •Сортировка выбором
- •Сортировка методом пузырька
- •1.19.3 Многомерные массивы
- •Задания
- •1.19.4 Нерегулярные массивы
- •Глава 2 классы
- •Тема 2.1 Основы классов
- •Тема 2.2 Общая форма класса
- •Тема 2.3 Объявление объектов
- •Тема 2.4 Более подробное рассмотрение операции new
- •Тема 2.5 Присваивание переменных объектных ссылок
- •Тема 2.6 Знакомство с методами
- •Тема 2.7 Возвращение значения из метода
- •Тема 2.8 Добавление метода, принимающего параметры
- •Тема 2.9 Конструкторы
- •Тема 2.10 Сборка мусора
- •Тема 2.11 Перегрузка методов
- •Тема 2.12 Перегрузка конструкторов
- •Тема 2.13 Использование объектов в качестве параметров
- •Тема 2.14 Более пристальный взгляд на передачу аргументов
- •Тема 2.16 Рекурсия
- •Тема 2.17 Введение в управление доступом
- •Тема 2.18 Ключевое слово static
- •Тема 2.19 Ключевое слово final
- •Тема 2.20 Аргументы переменной длины
- •Тема 2.21 Строки и числа
- •Тема 2.22 Нумерованные типы
- •Глава 3 наследование и интерфейсы
- •Тема 3.1 Основы наследования
- •Тема 3.2 Наследование и доступ к членам класса
- •Тема 3.3 Конструкторы и наследование
- •Тема 3.4 Использование ключевого слова super для вызова конструктора суперкласса
- •Тема 3.5 Использование ключевого слова super для доступа к членам суперкласса
- •Тема 3.6 Многоуровневая иерархия
- •Тема 3.7 Когда вызываются конструкторы
- •Тема 3.8 Объекты подклассов и ссылки на суперклассы
- •Тема 3.9 Переопределение методов
- •Тема 3.10 Переопределение методов и поддержка полиморфизма
- •Тема 3.11 Использование абстрактных классов
- •Тема 3.12 Использование ключевого слова final
- •Тема 3.13 Предотвращение переопределения методов
- •Тема 3.14 Предотвращение наследования
- •Тема 3.15 Класс Object
- •Тема 3.16 Интерфейсы
- •3.16.1 Объявление интерфейса.
- •3.16.2 Реализация интерфейсов
- •3.16.3 Использование ссылок на интерфейсы
- •3.16.4 Переменные в составе интерфейсов
- •3.16.5 Наследование интерфейсов
- •Тема 3.17 Пакеты и ограничение доступа
- •Тема 3.18 Внутренние классы
- •3.18.1 Внутренние (inner) классы
- •3.18.2 Вложенные (nested) классы
- •3.18.3 Анонимные (anonymous) классы
- •Глава 4 Обработка исключительных ситуаций
- •Тема 4.1 Исключения в Java
- •Тема 4.2 Типы исключений
- •Тема 4.3 Неперехваченные исключения
- •Тема 4.4 Ключевые слова try и catch
- •Тема 4.6 Ключевое слово throw
- •Тема 4.7 Ключевое слово throws
- •Тема 4.8 Ключевое слово finally
- •Ошибка при выполнении метода1 java.Lang.ArithmeticException: Demo
- •Тема 4.9 Потомки Exception или написание своих классов ошибок
- •Глава 5 Универсальные типы. КоллекциИ
- •Тема 5.1 Общие сведения об универсальных типах
- •Тема 5.2 Универсальный класс с двумя параметрами типа
- •Тема 5.3 Ограниченные типы
- •Тема 5.4 Использование групповых параметров
- •Тема 5.5 Универсальные методы
- •Тема 5.6 Универсальные интерфейсы
- •Тема 5.7 Ошибки неоднозначности
- •Тема 5.8 Ограничения универсальных типов
- •Тема 5.9 Краткий обзор коллекций
- •5.9.1 Класс ArrayList
- •5.9.2 Класс LinkedList
- •5.9.3 Класс HashSet
- •5.9.4 Класс TreeSet
- •5.9.5 Доступ к коллекции через итератор
- •5.9.6 Алгоритмы коллекций
- •Глава 6 jdbc (Java DataBase Connectivity) Тема 6.1 Драйверы, соединения и запросы
- •Тема 6.2 Простое соединение и простой запрос
- •Тема 6.2 Класс ResultSet
- •Тема 6.3 Метаданные
- •Тема 6.4 Подготовленные запросы
- •Глава 7 Swing и пользовательский интерфейс
- •Тема 7.1 Общие сведения о swing
- •Тема 7.2 Архитектура mvc
- •Тема 7.3 Контейнер и компоненты
- •Тема 7.4 Простая программа, использующая средства Swing
- •Тема 7.5 Поддержка событий
- •Тема 7.6 Использование кнопок и обработка событий
- •Тема 7.7 Краткие сведения о диспетчерах компоновки
- •Тема 7.8 Пример использования jdbc и swing вместе
Тема 3.5 Использование ключевого слова super для доступа к членам суперкласса
Существует еще одна форма ключевого слова super, которая применяется подобно this, но ссылается на суперкласс класса. Формат обращения к члену суперкласса имеет следующий вид:
super.член_класса
где в качестве члена класса может выступать либо метод, либо переменная экземпляра.
Данная форма super применяется тогда, когда член подкласса маскирует член суперкласса. Рассмотрим следующую несложную иерархию классов(листинг 3.8):
Листинг 3.8
// Использование ключевого слова super
// для предотвращения маскировки имен
public class A {
public int i;
}
// Создание подкласса, расширяющего класс А
public class B extends A {
public int i; // Данная переменная i маскирует
// переменную i в составе класса А
public B(int a, int b) {
// Выражение super.i ссылается на переменную i в классе А
super.i = a; // i в классе А
i = b; // i в классе В
}
public void show() {
System.out.println("i in superclass: " + super.i);
System.out.println("i in subclass: " + i);
}
}
class UseSuper {
public static void main(String args[]) {
B subOb = new B(1, 2);
subOb.show();
}
}
Несмотря на то что переменная экземпляра i в классе В маскирует одноименную переменную в классе А, ключевое слово super позволяет обращаться к переменной в составе суперкласса. Точно так же данное ключевое слово можно использовать для вызова методов, маскируемых методами подкласса.
Тема 3.6 Многоуровневая иерархия
До сих пор мы имели дело с простыми иерархиями классов, состоящими только из суперкласса и подкласса. Однако можно создать иерархическую структуру, насчитывающую как угодно много уровней наследования. Как было сказано ранее, подкласс может выступать в роли суперкласса для другого класса. Так, например, среди классов А, В и С класс С может быть подклассом класса В, а он, в свою очередь, – подклассом класса А. В подобных ситуациях каждый подкласс наследует характеристики всех суперклассов. В частности, класс С наследует элементы В и А.
Для того чтобы лучше понять использование многоуровневой иерархии, рассмотрим следующую программу. В ней подкласс Triangle выступает в роли суперкласса для класса ColorTriangle. Класс ColorTriangle наследует все свойства Triangle и TwoDShape, и, кроме того, в нем имеется поле color, определяющее цвет треугольника (листинг 3.9).
Листинг 3.9
// Многоуровневая иерархия
public class TwoDShape {
private double width;
private double height;
// Конструктор по умолчанию
public TwoDShape() {
width = height = 0.0;
}
// Конструктор с параметрами
public TwoDShape(double w, double h) {
width = w;
height = h;
}
// Формирование объекта с одинаковыми
// значениями width и height
public TwoDShape(double x) {
width = height = x;
}
// Методы доступа к переменным width и height
public double getWidth() {
return width;
}
public double getHeight() {
return height;
}
public void setWidth(double w) {
width = w;
}
public void setHeight(double h) {
height = h;
}
public void showDim() {
System.out.println("Width and height are "
+ width + " and " + height);
}
}
// Подкласс класса TwoDShape
public class Triangle extends TwoDShape {
private String style;
// Конструктор по умолчанию
public Triangle() {
super();
style = "null";
}
public Triangle(String s, double w, double h) {
super(w, h); // Вызов конструктора суперкласса
style = s;
}
// Формирование равнобедренного треугольника
public Triangle(double x) {
super(x); // Вызов конструктора суперкласса
style = "isosceles";
}
public double area() {
return getWidth() * getHeight() / 2;
}
public void showStyle() {
System.out.println("Triangle is " + style);
}
}
// Подкласс класса Triangle.
// Класс ColorTriangle является подклассом Triangle
// который, в свою очередь, расширяет класс TwoDShape.
// Следовательно, ColorTriangle содержит переменные
// и методы как класса Triangle, так и класса TwoDShape.
public class ColorTriangle extends Triangle {
private String color;
public ColorTriangle(String c, String s,
double w, double h) {
super(s, w, h);
color = c;
}
public String getColor() {
return color;
}
public void showColor() {
System.out.println("Color is " + color);
}
}
public class Shapes6 {
public static void main(String args[]) {
ColorTriangle t1 = new ColorTriangle("Blue", "right", 8.0, 12.0);
ColorTriangle t2 = new ColorTriangle("Red", "isosceles", 2.0, 2.0);
System.out.println("Info for t1: ");
t1.showStyle();
t1.showDim();
t1.showColor();
System.out.println("Area is " + t1.area());
System.out.println();
System.out.println("Info for t2: ");
// Из объекта ColorTriangle можно вызывать методы,
// принадлежащие как ему самому, так и его суперклассам
t2.showStyle();
t2.showDim();
t2.showColor();
System.out.println("Area is " + t2.area());
}
}
Благодаря наследованию ColorTriangle может использовать ранее определенные классы Triangle и TwoDShape, добавляя лишь информацию, специфическую для той задачи, для которой создавался ColorTriangle. Таким образом, наследование способствует повторному использованию кода.
Данный пример также иллюстрирует еще одну важную деталь: выражение super() всегда ссылается на конструктор ближайшего суперкласса. Другими словами, выражение super() в ColorTriangle означает вызов конструктора Triangle. В классе же Triangle вызов super() относится к конструктору TwoDShape. Если в иерархии классов для конструктора суперкласса предусмотрены параметры, то все суперклассы должны передавать их вверх по иерархической структуре. Это правило не зависит от того, нужны ли параметры самому подклассу.
Задание:
Добавьте класс Котенок(потомок класса Кот) с полем время кормления. Напишите конструктор.