From f5250f26996416c8984f6f6d174aee9de2c4c1c5 Mon Sep 17 00:00:00 2001 From: StNicolay Date: Sun, 12 Nov 2023 06:13:14 +0000 Subject: [PATCH] Java 29.10.2023 --- Java/Java.md | 106 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 106 insertions(+) diff --git a/Java/Java.md b/Java/Java.md index 3fc8c30..846d496 100644 --- a/Java/Java.md +++ b/Java/Java.md @@ -406,6 +406,58 @@ public interface Swimmable { class Duck implements Swimmable {} ``` +Могут быть статические и приватные (доступные только внутри интерфейса) методы и константы + +```Java +public interface Foo { + int VALUE = 5; // Подразумевается public static final т.е. публичная константная + + static void foo() { + System.out.println("Foo"); + } + + private int bar(int a, int b) { + return a + b; + } +} + +class Bar implements Foo {} +``` + +Интерфейсы могут расширять друг друга + +```Java +interface Foo { + void foo(); +} + +interface Bar extends Foo { + default void bar() { + return; + } +} + +class Baz implements Bar { + public void foo() {} +} +``` + +Интерфейсы могут быть вложены в классы + +```Java +class Printer { + interface Printable { + void print(); + } +} + +class Journal implements Printer.Printable { + public void print() { + System.out.println("Priniting journal"); + } +} +``` + ### Классы обёртки *Обёртка* - класс, хранящий внутри значение примитива. Эти классы содержат полезные методы и являются не изменяемыми @@ -657,3 +709,57 @@ public class Main { } } ``` + +## Generic + +```Java +class Account { // Account account = new Account("FooBar"); + private T id; + public int sum; + + public Account(T id, int sum) { + this.id = id; + this.sum = sum; + } + + public T getId() { + return id; + } +} + +class Printer { + public static void print(T[] items) { // Вызывать так: Printer.print(new String[]{"a", "b"}); + for(T item: items) { + System.out.println(item); + } + } +} + +interface Acountable { + String getId(); +} + +class Account2 implements Acountable { + String id; + + public Account2(T id) { // Account account = new Account(5); + this.id = id.toString(); + } + + public String getId() { + return id; + } +} + +class Transaction { // T может быть только наследником Account + T account; +} + +class Transaction2 { // T имплементирует Acountable + T account; +} + +class Transaction3 { // T имплементирует Accountable и наследует Account + T account; +} +```