Читайте также:
|
|
Тема: «Объекты, классы и интерфейсы в программных приложениях Java».
Целью занятия является освоение навыков:
· объявления классов и интерфейсов;
· организация работы иерархии классов программного приложения;
· конструкции интерфейсов;
· организация инкапсуляции.
Задание: Разработать программу, в которой осуществляется построение классов и интерфейсов.
Текст Java – программы
public class Rect {
// Поля данных класса прямоугольник
public int x1, y1, x2, y2;
/**
* Метод Rect является главным конструктором класса. Он использует
* аргументы для инициализации полей нового объекта. Его имя
* совпадает с именем класса и не содержит возвращаемого значения
**/
public Rect(int x1, int y1, int x2, int y2) {
this.x1 = x1;
this.y1 = y1;
this.x2 = x2;
this.y2 = y2;
}
/**
* Еще один конструктор, определяющийся через предыдущий
**/
public Rect(int width, int height) { this(0, 0, width, height); }
/** Еще один конструктор. */
public Rect() { this(0, 0, 0, 0); }
/** перемещение прямоугольника на заданное расстояние */
public void move(int deltax, int deltay) {
x1 += deltax; x2 += deltax;
y1 += deltay; y2 += deltay;
}
/** Проверка: находится ли заданная точка внутри прямоугольника */
public boolean isInside(int x, int y) {
return ((x >= x1)&& (x <= x2)&& (y >= y1)&& (y <= y2));
}
/**
* Возвращение объединения прямоугольника с другим
**/
public Rect union(Rect r) {
return new Rect((this.x1 < r.x1)? this.x1: r.x1,
(this.y1 < r.y1)? this.y1: r.y1,
(this.x2 > r.x2)? this.x2: r.x2,
(this.y2 > r.y2)? this.y2: r.y2);
}
/**
* Возвращение пересечения прямоугольника с другим.
**/
public Rect intersection(Rect r) {
Rect result = new Rect((this.x1 > r.x1)? this.x1: r.x1,
(this.y1 > r.y1)? this.y1: r.y1,
(this.x2 < r.x2)? this.x2: r.x2,
(this.y2 < r.y2)? this.y2: r.y2);
if (result.x1 > result.x2) { result.x1 = result.x2 = 0; }
if (result.y1 > result.y2) { result.y1 = result.y2 = 0; }
return result;
}
/**
* Метод базового класса Object. Представляем его таким образом,
* чтобы с объектом Rect можно было работать как со строками, и
* передавать методу System.out.println()
**/
public String toString() {
return "[" + x1 + "," + y1 + "; " + x2 + "," + y2 + "]";
}
}
Пример: Демонстрация возможности применения класса Rect.
public class RectTest {
public static void main(String[] args) {
Rect r1 = new Rect(1, 1, 4, 4); // Создание объекта класса Rect
Rect r2 = new Rect(2, 3, 5, 6);
Rect u = r1.union(r2); // Вызов методов класса Rect
Rect i = r2.intersection(r1);
if (u.isInside(r2.x1, r2.y1)) // Используем поля Rect для вызова метода
System.out.println("(" + r2.x1 + "," + r2.y1 +
") содержится в объединении");
// Неявный вызов метода Rect.toString()
System.out.println(r1 + " объединение " + r2 + " = " + u);
System.out.println(r1 + " пересечение " + r2 + " = " + i);
}
}
Пример: Реализация подкласса в классе Rect. Класс DrawableRec наследует поля и методы класса Rect и добавляет собственный метод drow(), рисующий прямоугольник при помощи объекта библиотеки java.awt.Graphics.
public class DrawableRect extends Rect {
/** Конструктор DrawableRect вызывает конструктор класса Rect()*/
public DrawableRect(int x1, int y1, int x2, int y2) { super(x1,y1,x2,y2); }
/** Новый метод в классе DrawableRect */
public void draw(java.awt.Graphics g) {
g.drawRect(x1, y1, (x2 - x1), (y2-y1));
}
}
Пример: Следующий подкласс, наследующий поля и методы классов DrawableRect и Rect, добавляет два новых поля, задающих цвет рамки и цвет заполнения изображаемого прямоугольника.
import java.awt.*;
/**
* Этот класс является подклассом DrawableRect и добавляет цвет
**/
public class ColoredRect extends DrawableRect {
// Новые поля, определяемые классом.
// Поля x1, y1, x2, и y2, наследуемые от класса Rect.
protected Color border, fill;
/**
* Конструктор использует super() для вызова конструктора базового
* класса.
**/
public ColoredRect(int x1, int y1, int x2, int y2,
Color border, Color fill)
{
super(x1, y1, x2, y2);
this.border = border;
this.fill = fill;
}
/**
* Метод замещает метод draw() базового класса
* для задания цвета.
**/
public void draw(Graphics g) {
g.setColor(fill);
g.fillRect(x1, y1, (x2-x1), (y2-y1));
g.setColor(border);
g.drawRect(x1, y1, (x2-x1), (y2-y1));
}
}
Дата добавления: 2015-09-11; просмотров: 28 | Поможем написать вашу работу | Нарушение авторских прав |