[Java] Классы и методы, прямоугольник, окружность и человечек
Покрытые темы
public class Human {
// Эти переменные (поля) - являются внутренними знаниями каждого конкретного объета этого класса Human
int age;
String name;
// Это конструктор - то что создает новый объект этого класса Human и заполняет его поля изначальными значениями
Human(int age, String name) {
// this.age - способ обратиться к переменной (полю) текущего объекта, т.е. того объекта который мы сейчас создаем
this.age = age;
this.name = name;
}
// Это метод - является навыком который есть у каждого конкретного объекта этого класса Human
// в скобочках у функции указан аргумент - чтобы в момент когда этому человеку сказали "вырасти на столько-то лет"
// был способ указать на сколько лет - передав это число в скобочки (см. ниже в main() использование этого метода)
void grow(int n) {
age += n; // он может обращаться к переменным (полям) этого класса, т.е. он может пользоваться своими знаниям, обновлять их
}
// Это тоже метод, и как и прошлый - оба метода ничего не возвращают как результат, в них нет return
// поэтоме тип их результата - void = пустота = отсутствие результата
void tellYourNameLoudly() {
System.out.print("MY NAAAME ISSS: ");
System.out.println(name);
}
// Этот метод возвращает возраст через год, поэтому здесь есть return и тип результата - int
int tellMeYourAgeInNextYear() {
int result = age + 1;
return result;
}
// В этом методе наш объект Human сравнивает свое имя с именем другого объекта Human
// этот другой объект класса Human передан в эту функцию как параметр
// ровно так же как было в grow(int n), только там был параметр число, а тут параметр - другой человек
boolean isHeYourTeska(Human h) {
// boolean - это еще один тип как int/double
// в нем может быть либо логическое ИСТИНА, либо ЛОЖЬ
// т.е. true или false
boolean res = false;
// чтобы узнать свое имя (т.е. имя того у кого был вызван метод <КТО-ТО>.isHeYourTeska(...))
// можно использовать: name или this.name
// чтобы узнать чужое имя этого другого человека h
// нужно использовать: h.name
if (name.equals(h.name)) { // не забываем что строки надо сравнивать через equals(), а не через ==
res = true;
}
return res;
}
// Этот метод делает полного клона человека
Human makeClone() {
// Создаем нового человека и подставляем в него тот же возраст и имя что и у нас
Human res = new Human(this.age, this.name);
// Если в будущем у этого клона изменится возраст или имя - эти изменения не затронут нас (и наоборот)
return res;
}
}
И можно использовать в main-функции:
class Main {
public static void main(String[] args) {
Human petya = new Human(10, "Petya"); // здесь мы вызвали конструктор - создали новый объект класса Human и заполнили его внутренние переменные
petya.grow(1); // здесь мы сказали ему позврослеть на один годик (его возраст увеличился на 1)
int n = 4;
petya.grow(n); // здесь мы сказали ему позврослеть на 4 годика (его возраст увеличился на 4)
int nextAge = petya.tellMeYourAgeInNextYear(); // здесь мы спросили какой возраст у него будет еще через год и смогли сохранить этот возраст в переменную
System.out.println("Next age: " + nextAge);
Human vasya = new Human(20, "Vasya");
boolean isTheSameNames = vasya.isHeYourTeska(petya);
if (isTheSameNames) {
System.out.println("They have the same name!");
} else {
System.out.println("They have different names!");
}
Human vasya2 = vasya.makeClone(); // клонирование! теперь у нас два Васи, и каждый живет своей жизнью
}
}
Правила игры
Из выполненных заданий вы должны постепенно накопить небольшую программу которая и является результатом вашей работы.
Не уходите с урока пока не покажите мне как далеко вы зашли. И не забудьте взять с собой исходники домой (можно отправить себе на почту).
Дома сделайте три небольших задачки на дом в mdl (см. следующую статью). И затем доделайте то что осталось из заданий ниже - на следующих уроках у вас должны быть с собой исходники (скиньте их сами себе на почту например, или на флешку).
Задание
Задание 1. Создайте описание класса прямоугольник
Создайте класс Rectangle
описывающий прямоугольник с вещественными координатами.
Нужно сделать:
- Четыре вещественных поля
- Конструктор
- Метод
print
который выводит в консоль описание прямоугольника в симпатичном виде - напримерRectangle [(10, 20); (30, 50)]
- Метод
area
который возвращает площадь прямоугольника
Задание 2. Создайте метод проверки пересечения
Добавьте метод isIntersects
который принимает другой прямоугольник и возвращает boolean
значение:
true
если прямоугольники пересекаютсяfalse
если прямоугольники не пересекаются
Задание 3. Создайте метод пересечения
Добавьте метод intersect
который принимает аргументом второй прямоугольник и возвращает новый прямоугольник являющийся их пересечением. Если прямоугольники не пересекаются - пусть возвращается null
.
Вам поможет разобраться как это сделать пример в начале этой статьи - про boolean isHeYourTeska(Human h)
и Human makeClone()
.
Задание 4. Создайте описание класса окружность
Создайте окружность:
- Подумайте какие у нее должны быть поля
- Сделайте конструктор
- Сделайте метод
print
- Сделайте метод
area
- Сделайте метод
isIntersects
принимающий аргументом вторую окружность
Задание 5. Создайте класс человечек
Создайте класс Human
.
Конструктор должен принимать три числа:
- Рост человечка \(height\)
- \(x\) и \(y\) его местоположения
При этом среди полей человечка должны быть руки, ноги, голова и туловище, описанные соответствующими прямоугольниками и окружностями (с координатами относительно местоположения человечка и с учетом роста).
- Сделайте метод
area
(он должен суммировать площадь по всем его частям, т.е. вызвать методarea
у каждой из них) - Сделайте метод
isIntersects
(он должен проверять пересекаем ли мы другого человечка, т.е. попробовать пересечь каждую нашу часть с каждой его частью)