diff --git a/Java/Java.md b/Java/Java.md index 17542ec..37b84bf 100644 --- a/Java/Java.md +++ b/Java/Java.md @@ -331,3 +331,98 @@ class Main { } } ``` + +#### Абстрактные классы + +Абстрактные классы могут иметь абстрактные методы (без имплементации), но от них низя создать объект. + +```Java +abstract class Car { + int speed; + + public int getSpeed() { + return speed; + } + + public void setSpeed(int speed) { + this.speed = speed; + } + + abstract int brake(); +} + +class Sedan extends Car { + @Override + int brake() { + return 5; + } +} + +public class Main { + public static void main(String[] args) { + Car car = new Car(); // Низя. Класс абстрактный + Sedan sedan = new Sedan(); + } +} +``` + +### Интерфейсы + +Абстрактные классы для классов, которые имеют много общего, имеют близкую связть, а интерфейсы используются для тех, которые не имеют связи: + +* Bird - абстрактный класс +* Flyable - интерфейс. Его могут имплементировать и птицы, и самолёты, и Карлсон + +Отличия от классов: + +* Нельзя создать экземпляр +* Не содержатся конструкторы +* Все методы абстрактные +* Все поля и *static* и *final* +* Интерфейс не расширяется классом, а реализуется +* Интерфейс может расширить множество интерфейсов + +```Java +public interface Swimmable { + public void swim(); +} + +class Duck implements Swimmable { + public void swim() { + System.out.println("A duck is swimming"); + } +} +``` + +### Классы обёртки + +*Обёртка* - класс, хранящий внутри значение примитива. Эти классы содержат полезные методы и являются не изменяемыми + +#### Автораспаковка, автоупаковка + +```Java +int x = 5; +Integer y = x; // Автоупаковка +x = y; // Автораспаковка +``` + +Автоупаковка и автораспаковка не работает для массивов + +## Коллекции + +Основные виды: + +* Set + * HashSet + * TreeSet + * SortedSet +* List + * ArrayList + * LinkedList + * Vector + * Stack +* Map + * HashMap + * TreeMap + * SortedMap + * Hashtable