}
public void setName(String name) { this.name = name; } public String getName() { return name; }
public String getType() { return "Домашнее животное"; }
}
public class Cat extends Pet { private Date lastMeowDate; public Cat() { this("Unnamed"); }
public Cat(String name) { super(name); }
public Cat(String name, int age) { super(name, age); } @Override
public String getType() { return "Кот"; } public void meow() {
System.out.println("Meow!"); lastMeowDate = new Date();
}
}
Наследование
super() означает Ссылка на базовый класс, которую можно использовать в дочерних классах.
Переопределение (Overriding)
Означает переписывание (переделывание, переопределение) в классепотомке УЖЕ существующего метода класса-родителя.
Аннотирование в Java
Специальная форма синтаксических метаданных, которая может быть добавлена в исходный код. Аннотации используются для анализа кода, компиляции или выполнения. Аннотируемы пакеты, классы, методы, переменные и параметры. Например: @Override - проверяет, переопределён ли метод. Вызывает ошибку компиляции, если метод не найден в родительском классе;
UML диаграмма отношения классов - наследование
Полиморфизм в Java
Определение полиморфизма.
Свойство системы, позволяющее использовать объекты с одинаковым интерфейсом без информации о типе и внутренней структуре объекта.
Пример:
Pet pet1 = new Pet(); Pet pet2 = new Cat(); Pet pet3 = new Dog(); pet1.getType(); pet2.getType(); pet3.getType();
Тип ссылка или Тип объект
Pet pet1 = new Pet(); Pet pet2 = new Cat(); Pet pet3 = new Dog(); pet1.getType(); pet2.getType(); pet2.meow(); pet3.getType(); pet3.woof();
Проверьте, есть ли ошибки?
Ошибки
Типы ошибок в Java
Домашнее задание
Необходимо модифицировать программу с домашними животными, таким образом, чтобы можно было делать выборку кошек по возрасту, также добавив начальный список животных собак. К выводу клички добавить тип животного («кот Барсик», «собака Улыбака»).
Класс Object
Методы Object
•boolean equals(Object obj);
•String toString(); // необходимо переопределять
•int hashCode();
•Object clone();
Домашнее задание
Создкласскомплексноетьчисло
public class Complex { private int re; private int im;
Complex(int re, int im) { … } @Override
public boolean equals(Object obj) { … } @Override
public String toString() { … } //Метод,реализующоперацсложенияюй
public Complex plus(Complex z) { … }
// Метод, реализующий операцию вычитания public Complex minus(Complex z) { … }
}
Создать класс для демонстрации работы класса комплексных чисел:
public class ComplexTest {
public static void main(String[] args) { Complex z1 = new Complex(1, 0); Complex z2 = new Complex(2, 3); Complex z3 = new Complex(5, 10); System.out.println("z1 = " + z1); System.out.println("z2 = " + z2); System.out.println("z3 = " + z3);
System.out.println("z1 + z2 = " + z1.plus(z2)); System.out.println("z1 - z3 = " + z1.minus(z3)); System.out.println(z1.equals(z3) ? “z1 == z3” : “z1 !=
z3”);
}
}
Абстрактные классы в Java
Когда мы создаем абстрактный класс, то предполагаем наследоваться от него. Так-как абстрактный класс не предполагает создания экземпляров.
В абстрактном классе мы будем определять абстрактные методы, реализовывать которые будем в классах наследниках
public abstract class Pet {
private String name; private int age;
public Pet() { this("Unnamed");}
public Pet(String name) {name = "Unnamed";} public Pet(String name, int age) {
this.name = name; this.age = age;
}
public void setName(String name) { this.name = name; } public String getName() { return name; }
public String getType() { return "Домашнее животное"; } public abstract void say(); // абстрактный метод
}
Класс Cat расширяет Pet
public class Cat extends Pet { private Date lastMeowDate; public Cat() { this("Unnamed"); }
public Cat(String name) { super(name); }
public Cat(String name, int age) { super(name, age); }
@Override
public String getType() { return "Кот"; }
@Override
public void say() { System.out.println("Meow!"); lastMeowDate = new Date();
}
}
Правило наследования Java
Если вы не реализовали в классе наследнике все абстрактные методы абстрактного класса от которого наследовались, то вы получите опять абстрактный класс.
Правило: Класс-наследник может наследовать только один базовый класс, но множество интерфейсов.
В Java множественное наследование реализовано через механизм интерфейсов.
Интерфейсы в Java
Интерфейс Java представляет собой набор абстрактных методов и констант (необязательно). Абстрактный метод представляет собой заголовок метода без тела. Абстрактный метод объявляется с помощью модификатора abstract, потому, что все методы в интерфейсе являются как правило, абстрактными, то у них нет реализации.