Successfully reported this slideshow.
Your SlideShare is downloading. ×

Урок 12. Интерфейсы и перечисления в языке Java

Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad

Check these out next

1 of 73 Ad

Урок 12. Интерфейсы и перечисления в языке Java

Download to read offline

Урок 12. Интерфейсы и перечисления в языке Java.
Что такое интерфейс, вложенные интерфейсы, расширение интерфейсов, интерфейсы маркеры, методы по умолчанию и статические методы.
Отношения между классами.
Приведение ссылочных типов.
Перечисления.
Лекции, задания, видео, тесты и вопросы на:
https://www.examclouds.com/ru/java/java-core-russian/lesson10
Подписывайтесь на страницу:
https://www.facebook.com/Examclouds
Подписывайтесь на канал
https://www.youtube.com/c/tatyanamilkina

Урок 12. Интерфейсы и перечисления в языке Java.
Что такое интерфейс, вложенные интерфейсы, расширение интерфейсов, интерфейсы маркеры, методы по умолчанию и статические методы.
Отношения между классами.
Приведение ссылочных типов.
Перечисления.
Лекции, задания, видео, тесты и вопросы на:
https://www.examclouds.com/ru/java/java-core-russian/lesson10
Подписывайтесь на страницу:
https://www.facebook.com/Examclouds
Подписывайтесь на канал
https://www.youtube.com/c/tatyanamilkina

Advertisement
Advertisement

More Related Content

Slideshows for you (20)

Similar to Урок 12. Интерфейсы и перечисления в языке Java (20)

Advertisement

Урок 12. Интерфейсы и перечисления в языке Java

  1. 1. Урок 12 Интерфейсы и перечисления в языке Java 1. Что такое интерфейс 2. Вложенные интерфейсы 3. Расширение интерфейсов 4. Интерфейсы маркеры 5. Методы по умолчанию и статические методы 6. Отношения между классами 7. Приведение ссылочных типов 8. Перечисления www.examclouds.com
  2. 2. Что такое интерфейс? • Интерфейс это конструкция языка Java, в рамках которой принято описывать абстрактные публичные (abstract public) методы и статические константы (final static). • С помощью интерфейса можно указать, что именно должен выполнять класс, но не как это делать. • Интерфейсы не способны сохранять данные состояния. • Интерфейсы позволяют в полной мере использовать принцип полиморфизма "один интерфейс, несколько методов". www.examclouds.com
  3. 3. www.examclouds.com
  4. 4. Пример интерфейса • Все методы интерфейса являются public abstract и эти модификаторы необязательны. • Объявляемые методы не содержат тел. Их объявления завершаются точкой с запятой. • По существу, они являются абстрактными методами. • public interface Moveable { void moveRight(); void moveLeft(); • … www.examclouds.com
  5. 5. Пример интерфейса • Интерфейсы могут быть c модификатором public или default. • Переменные интерфейса являются public static final по умолчанию и эти модификаторы необязательны. • public interface Moveable { int RIGHT = 1; int LEFT = 2; int UP = 3; int DOWN = 4; … } www.examclouds.com
  6. 6. Пример класса реализующего Moveable интерфейс • Чтобы реализовать интерфейс, в классе должен быть создан полный набор методов, определенных в этом интерфейсе. Но в каждом классе могут быть определены особенности собственной реализации данного интерфейса. public class Transport implements Moveable { public void moveRight() { System.out.println("Транспорт поворачивает вправо."); } public void moveLeft() { System.out.println("Транспорт поворачивает влево."); } public void stop() { System.out.println("Транспорт останавливается."); } public void start() { System.out.println("Транспорт стартует."); } } www.examclouds.com
  7. 7. Один интерфейс может быть реализован любым количеством классов www.examclouds.com
  8. 8. Пример класса не полностью реализующего интерфейс • Если класс реализует интерфейс, но не полностью реализует определенные в нем методы, он должен быть объявлен как abstract: public abstract class Device implements Moveable { public void moveRight() { System.out.println("Девайс поворачивает вправо."); } } www.examclouds.com
  9. 9. Пример • Переменные можно объявлять как ссылки на объекты, в которых используется тип интерфейса, а не тип класса. • На основе интерфейсов нельзя порождать объекты. public class TransportDemo { public static void main(String[] args) { Moveable moveable = new Transport(); Transport transport = new Transport(); Moveable robot = new Robot(); //Moveable moveable1 = new Moveable(); // moveable.start(); moveable.moveRight(); moveable.moveLeft(); System.out.println(); transport.start(); transport.moveRight(); transport.moveLeft(); transport.stop(); System.out.println(); robot.moveLeft(); robot.moveRight(); } } www.examclouds.com
  10. 10. Задание 1. Определить интерфейс Printable, содержащий метод void print(). 2. Определить класс Book, реализующий интерфейс Printable. 3. Определить класс Magazine, реализующий интерфейс Printable. 4. Создать массив типа Printable, который будет содержать книги и журналы. 5. В цикле пройти по массиву и вызвать метод print для каждого объекта. www.examclouds.com
  11. 11. Один класс может реализовать любое количество интерфейсов. www.examclouds.com
  12. 12. Класс реализующий несколько интерфейсов public class Pickup implements CargoAuto, PassengersAuto { public void transportCargo() { System.out.println("Везу груз"); } public void transportPassengers() { System.out.println("Везу пассажиров"); } } public interface CargoAuto { void transportCargo(); } public interface PassengersAuto { void transportPassengers(); } www.examclouds.com
  13. 13. Вложенные интерфейсы • Интерфейсы могут вкладываться в классы и в другие интерфейсы. public class A { private interface NestedIf { boolean isNotNegative(int x); } } public class B implements A.NestedIf { public boolean isNotNegative(int x) { return x >= 0; } } www.examclouds.com
  14. 14. Вложенные интерфейсы public class NestedIfDemo { public static void main(String[] args) { A.NestedIf nif = new B(); if (nif.isNotNegative(10)) { System.out.println("Число 10 не отрицательное."); } if (nif.isNotNegative(-12)) { System.out.println("Этo не будет выведено."); } } } www.examclouds.com
  15. 15. Расширение интерфейсов Интерфейс может наследоваться от другого интерфейса через ключевое слово extends. www.examclouds.com
  16. 16. Расширение интерфейсов public interface Sport { void setHomeTeam(String name); void setVisitingTeam(String name); } public interface Hockey extends Sport { void homeGoalScored(); void visitingGoalScored(); void endOfPeriod(int period); void overtimePeriod(int ot); } public interface TVProgram { void switchToChannel(); } public interface Football extends Sport, TVProgram { void homeTeamScored(int points); void visitingTeamScored(int points); void endOfQuarter(int quarter); } www.examclouds.com
  17. 17. Расширение интерфейсов public class FootballImpl implements Football { @Override public void setHomeTeam(String name) { System.out.println("Setting Home Team"); } @Override public void switchToChannel() { System.out.println("Switching to channel"); } @Override public void homeTeamScored(int points) { System.out.println("Scored"); } @Override public void setVisitingTeam(String name) { System.out.println("Setting visiting team"); } @Override public void visitingTeamScored(int points) { System.out.println("Visiting Team Scored"); } @Override public void endOfQuarter(int quarter) { System.out.println("End of quarter"); } } www.examclouds.com
  18. 18. Интерфейсы маркеры • Это интерфейсы, у которых не определены ни методы, ни переменные. • Реализация этих интерфейсов придает классу определенные свойства. • Например, интерфейсы Cloneable и Serializable, отвечающие за клонирование и сохранение объекта в информационном потоке, являются интерфейсами маркерами. Если класс реализует интерфейс Cloneable, это говорит о том, что объекты этого класса могут быть клонированы. www.examclouds.com
  19. 19. Методы по умолчанию • В JDК 8 в интерфейсы ввели методы по умолчанию - это методы у которых есть реализация. • Другое название - методы расширения. • Классы, реализующие интерфейсы, не обязаны переопределять такие методы, но могут если это необходимо. • Методы по умолчанию определяются с ключевым словом default. www.examclouds.com
  20. 20. Пример определения метода по умолчанию в интерфейсе public interface SomeInterface { default String defaultMethod() { return "Объект типа String по умолчанию"; } } public class SomeInterfaceImpl1 implements SomeInterface { } public class SomeInterfaceImpl2 implements SomeInterface { @Override public String defaultMethod() { return "Другая символьная строка"; } } public class DefaultMethodDemo { public static void main(String[] args) { SomeInterface obj1 = new SomeInterfaceImpl1(); SomeInterface obj2 = new SomeInterfaceImpl2(); System.out.println(obj1.defaultMethod()); System.out.println(obj2.defaultMethod()); } } Метод не переопределен Метод переопределен www.examclouds.com
  21. 21. Применение статических методов в интерфейсе • В версии JDK 8, в интерфейсы добавлена еще одна возможность - определять в нем статические методы. • Статические методы интерфейса, как и класса, можно вызывать независимо от любого объекта. • Для вызова статического метода достаточно указать имя интерфейса и через точку имя самого метода. www.examclouds.com
  22. 22. Пример статического метода в интерфейсе public interface MyIf { int getNumber(); static int staticMethod() { return 0; } } public class StaticMethodDemo { public static void main(String[] args) { MyIf obj1 = new MyIfImp(); System.out.println(obj1.getNumber()); System.out.println(MyIf.staticMethod()); } } public class MyIfImp implements MyIf { @Override public int getNumber() { return 0; } } www.examclouds.com
  23. 23. Отношения между классами • IS-A отношения • HAS-A отношения:  Ассоциация  Агрегация  Композиция www.examclouds.com
  24. 24. IS-A отношения • В ООП принцип IS-A основан на наследовании классов или реализации интерфейсов. Например: • HeavyBox IS-A Box, • Lorry IS-A Car, • Driver IS-A Person, • Transport IS-A Moveable. www.examclouds.com
  25. 25. HAS-A отношения • Ассоциация - объекты двух классов могут ссылаться друг на друга. Агрегация и композиция являются частными случаями ассоциации. • Агрегация - отношение когда один объект является частью другого. • Композиция - еще более тесная связь, когда объект не только является частью другого объекта, но и вообще не может принадлежат другому объекту. www.examclouds.com
  26. 26. Ассоциация • HAS-A отношения основаны на использовании. Другими словами, класс Horse HAS-A Halter если код в классе Horse содержит ссылку на экземпляр класса Halter. public class Halter { } public class Horse { private Halter halter; } www.examclouds.com
  27. 27. Агрегация public class Horse { private Halter halter; public Horse(Halter halter) { this.halter = halter; } } www.examclouds.com
  28. 28. Композиция public class Horse { private Halter halter; public Horse() { this.halter = new Halter(); } } www.examclouds.com
  29. 29. Приведение ссылочных типов В общем выделяют два варианта приведения ссылочных типов: • сужение • расширение www.examclouds.com
  30. 30. Расширение • Расширение означает переход от более конкретного типа к менее конкретному, то есть переход от детей к родителям. • Подобно случаю с примитивными типами, этот переход производится самой JVM при необходимости и незаметен для разработчика: • Box6 heavyBox = new HeavyBox(15, 10, 20, 5); Box6 colorBox = new ColorBox(25, 12, 20, "красный"); • (DifferentBoxDemo2.java) • Также расширяющим являются преобразованием от null-типа к любому объектному типу: Box6 box = null; www.examclouds.com
  31. 31. Сужение Обратный переход, то есть движение по дереву наследования вниз, к наследникам, является сужением. Box box = new HeavyBox(); HeavyBox heavyBox = (HeavyBox) box; www.examclouds.com
  32. 32. Сужение public class CastingDemo1 { public static void main(String[] args) { Box6 box1 = new HeavyBox1(); // System.out.println(box1.weight); HeavyBox1 heavyBox1 = (HeavyBox1) box1; System.out.println("Вес: " + heavyBox1.weight); Box6 box2 = new ColorBox(); HeavyBox1 heavyBox2 = (HeavyBox1) box2; //ClassCastException Box6 box3 = new Box6(); HeavyBox1 heavyBox3 = (HeavyBox1) box3; //ClassCastException } } www.examclouds.com
  33. 33. Оператор instanceof public class CastingDemo2 { public static void main(String[] args) { Box6 box1 = new HeavyBox1(); if (box1 instanceof HeavyBox1) { System.out.println("Приведение 1"); } if (box1 instanceof Box6) { System.out.println("Приведение 2"); } if (box1 instanceof Object) { System.out.println("Приведение 3"); } Box6 box2 = new ColorBox(); if (box2 instanceof HeavyBox1) { System.out.println("Приведение 4"); } Box6 box3 = new Box6(); if (box3 instanceof HeavyBox1) { System.out.println("Приведение 5"); } } www.examclouds.com
  34. 34. Пример преобразований с использованием интерфейсов public class CastingDemo3 { public static void main(String[] args) { Moveable moveable1 = new Transport(); if (moveable1 instanceof Transport) { Transport transport = (Transport) moveable1; transport.start(); } Moveable moveable2 = new Robot(); if (moveable2 instanceof Transport) { Transport transport = (Transport) moveable1; transport.stop(); } } } www.examclouds.com
  35. 35. Несовместимые преобразования • Преобразования возможны только внутри одной иерархии. • Данный пример не откомпилируется: Box6 box1 = new HeavyBox1(); String str = (String) box1; www.examclouds.com
  36. 36. Задание • Создать статический метод printMagazines(Printable[] printable) в классе Magazine, который выводит на консоль названия только журналов. • Создать статический метод printBooks(Printable[] printable) в классе Book, который выводит на консоль названия только книг. • Используем оператор instanceof. www.examclouds.com
  37. 37. 1. Массивы и примитивные типы • Переходы между массивами и примитивными типами являются запрещенными. • public class ArrayCastingDemo1 { public static void main(String[] args) { int[] array = new int[5]; //int someNumber =array; int someNumber = array[0]; } } www.examclouds.com
  38. 38. 2. Примитивные и ссылочные массивы • Массив, основанный на примитивном типе, принципиально нельзя преобразовать к типу массива, основанному на ссылочном типе, и наоборот. • public class ArrayCastingDemo2 { public static void main(String[] args) { Integer[] array1 = new Integer[4]; int[] array2 = new int[4]; // array1 = array2; // array2 = array1; } } www.examclouds.com
  39. 39. 3. Массивы основанные на разных примитивных типах • Преобразования между типами массивов, основанных на различных примитивных типах, невозможно. • public class ArrayCastingDemo3 { public static void main(String[] args) { int[] array1 = new int[5]; long[] array2 = new long[5]; // array2 = array1; } } www.examclouds.com
  40. 40. 4. Ссылочные массивы основанные на типах из одной иерархии • Массив, основанный на типе HeavyBox, можно привести к массиву, основанному на типе Box, если сам тип HeavyBox приводится к типу Box. public class ArrayCastingDemo5 { public static void main(String[] args) { rightConversion(); wrongConversion(); } private static void rightConversion() { Box6[] boxArray = new Box6[5]; HeavyBox1[] heavyBoxArray = new HeavyBox1[6]; boxArray = heavyBoxArray; } private static void wrongConversion() { Box6[] boxArray = new Box6[5]; HeavyBox1[] heavyBoxArray = new HeavyBox1[6]; //ошибка времени выполнения heavyBoxArray = (HeavyBox1[]) boxArray; } } www.examclouds.com
  41. 41. 5. Массивы и другие ссылочные типы • Преобразования между массивами и другими объектными типами возможны только для класса Object и интерфейсов Cloneable и Serializable. • public class ArrayCastingDemo4{ public static void main(String[] args) { Box6[] array = new Box6[5]; Object object = array; Cloneable cloneable = array; Serializable serializable = array; } } www.examclouds.com
  42. 42. 6. Ошибка ArrayStoreException public class ArrayCastingDemo6 { public static void main(String[] args) { HeavyBox1[] heavyBox = new HeavyBox1[4]; Box6[] box = heavyBox; box[0] = new Box6(); //ArrayStoreException } } www.examclouds.com
  43. 43. Что такое перечисления? Перечисления создаются использованием ключевого слова enum. 1. В простейшей форме перечисления - это список именованных констант. 2. Каждая константа перечисления является объектом класса, в котором она определена. 3. Константы перечисления являются static final и не могут быть изменены после создания. 4. Добавлены в Java 5. public enum CoffeeSize { BIG, HUGE, OVERWHELMING } www.examclouds.com
  44. 44. Использование констант public class CoffeeSize5 { public static final String BIG = "BIG"; public static final String HUGE = "HUGE"; public static final String OVERWHELMING = "OVERWHELMING"; } www.examclouds.com
  45. 45. Задание Создать перечисление, содержащее названия времен года. www.examclouds.com
  46. 46. Создание переменных • Можно создавать переменные типа перечисления. • Но получать экземпляры класса типа enum с помощью оператора new нельзя. • Переменная перечисления объявляется и применяется практически так же, как и переменные примитивных типов. public class CoffeeSizeDemo1 { public static void main(String[] args) { CoffeeSize coffeeSize = CoffeeSize.BIG; if (coffeeSize == CoffeeSize.BIG) { System.out.println(coffeeSize); } } } www.examclouds.com
  47. 47. Задание Создать переменную содержащую ваше любимое время. www.examclouds.com
  48. 48. Использование в операторе switch • Значения перечислимого типа можно также использовать в управляющем операторе switch. • В выражениях ветвей case должны использоваться константы из того же самого перечисления, что и в самом операторе switch. • В выражениях ветвей case имена констант указываются без уточнения имени их перечислимого типа. Тип перечисления в операторе switch уже неявно задает тип enum для операторов case. www.examclouds.com
  49. 49. Пример использования в операторе switch public class CoffeeSizeDemo2 { public static void main(String[] args) { CoffeeSize coffeeSize = CoffeeSize.BIG; switch (coffeeSize) { case BIG: System.out.println("Дайте мне большую чашку кофе!"); break; case HUGE: System.out.println("Дайте мне огромную чашку кофе!"); break; case OVERWHELMING: System.out.println("Дайте мне громадную чашку кофе!"); break; default: System.out.println("Чашка не выбрана."); } } } www.examclouds.com
  50. 50. Задание 1. Создать метод, который принимает на вход переменную созданного вами enum типа. 2. Если значение равно Лето, выводим на консоль “Я люблю лето” и т.д. 3. Используем оператор switch. www.examclouds.com
  51. 51. Класс java.lang.Enum 1. Перечисление в Java относится к типу класса. 2. Перечисления НЕ может наследоваться от другого класса и НЕ может быть суперклассом. 3. Все перечисления автоматически наследуют от класса java.lang.Enum. 4. В этом классе определяется ряд методов, доступных для использования во всех перечислениях: ordinal(), compareTo(), equals(), values() и valueOf(). 5. Перечисления неявно наследуют интерфейсы Serializable и Comparable. www.examclouds.com
  52. 52. Методы values() • Метод values() возвращает массив, содержащий список констант перечислимого типа. public class CoffeeSizeValuesDemo { public static void main(String[] args) { System.out.println("Константы перечислимого типа CoffeeSize:"); CoffeeSize[] coffeeSizes = CoffeeSize.values(); for (CoffeeSize c : coffeeSizes) { System.out.println(c); } } } www.examclouds.com
  53. 53. Задание В цикле распечатать все времена года. Используем метод values(). www.examclouds.com
  54. 54. Методы valueOf() • Метод valueOf() возвращает константу перечислимого типа, значение которой соответствует символьной строке, переданной в качестве аргумента. public class CoffeeSizeDemo3 { public static void main(String[] args) { CoffeeSize coffeeSize = CoffeeSize.valueOf("BIG"); System.out.println("Переменная coffeeSize содержит " + coffeeSize); } } www.examclouds.com
  55. 55. Задание Создать переменную содержащую ваше любимое время года с использованием метода valueOf(). www.examclouds.com
  56. 56. Метод ordinal() • Вызвав метод ordinal(), можно получить значение, которое обозначает позицию константы в списке констант перечислимого типа. • Порядковые значения начинаются с нуля. public class CoffeeSizeDemo4 { public static void main(String[] args) { for (CoffeeSize c : CoffeeSize.values()) { System.out.println(c + " " + c.ordinal()); } } } www.examclouds.com
  57. 57. Метод compareTo() • С помощью метода compareTo(типПеречисления e) можно сравнить порядковые значения двух констант одного и того же перечислимого типа. • Если порядковое значение вызывающей константы меньше, чем у константы е (this < e), то метод compareTo() возвращает отрицательное значение. • Если порядковые значения обеих констант одинаковы (this == e), возвращается нуль. • Если порядковое значение вызывающей константы больше, чем у константы е (this > e), то возвращается положительное значение. www.examclouds.com
  58. 58. Пример использования метода compareTo() public class CoffeeSizeCompareTo { public static void main(String[] args) { CoffeeSize bigCup = CoffeeSize.BIG; CoffeeSize hugeCup = CoffeeSize.HUGE; CoffeeSize anotherBigCup = CoffeeSize.BIG; CoffeeSize overwhelmingCup = CoffeeSize.OVERWHELMING; System.out.println("bigCup.compareTo(hugeCup): " + bigCup.compareTo(hugeCup)); System.out.println("hugeCup.compareTo(bigCup): " + hugeCup.compareTo(bigCup)); System.out.println("bigCup.compareTo(anotherBigCup): " + bigCup.compareTo(anotherBigCup)); System.out.println("bigCup.compareTo(overwhelmingCup): “ + bigCup.compareTo(overwhelmingCup)); } } www.examclouds.com
  59. 59. Метод equals() • Вызвав метод equals(), переопределяющий аналогичный метод из класса Object, можно сравнить на равенство константу перечислимого типа с любым другим объектом. • Но оба эти объекта будут равны только в том случае, если они ссылаются на одну и ту же константу из одного и того же перечисления. • Простое совпадение порядковых значений не вынудит метод equals() возвратить логическое значение true, если две константы относятся к разным перечислениям. www.examclouds.com
  60. 60. Пример использования метода equals() public class CoffeeSizeEquals { public static void main(String[] args) { CoffeeSize bigCup = CoffeeSize.BIG; CoffeeSize hugeCup = CoffeeSize.HUGE; CoffeeSize anotherBigCup = CoffeeSize.BIG; System.out.println("bigCup.equals(hugeCup): " + bigCup.equals(hugeCup)); System.out.println("bigCup.equals(anotherBigCup): " + bigCup.equals(anotherBigCup)); System.out.println("bigCup == anotherBigCup: " + (bigCup == anotherBigCup)); } } www.examclouds.com
  61. 61. Возможности перечисления 1. Создать экземпляр перечисления с помощью оператора new нельзя, но в остальном перечисление обладает всеми возможностями, которые имеются у других классов. 2. В перечисления можно добавлять конструкторы, переменные и методы. 3. Конструкторы перечисления являются private по умолчанию. www.examclouds.com
  62. 62. Пример использования конструктора, переменной и метода в перечислении public enum CoffeeSize2 { // 100, 150 и 200 передаются в конструктор BIG(100), HUGE(150), OVERWHELMING(200); private int ml; CoffeeSize2(int ml) { this.ml = ml; } public int getMl() { return ml; } } www.examclouds.com
  63. 63. Пример использования конструктора, переменной и метода в перечислении public class CoffeeSizeMlDemo { public static void main(String[] args) { for (CoffeeSize2 coffeeSize : CoffeeSize2.values()) { System.out.println(coffeeSize + " " + coffeeSize.getMl()); } } } www.examclouds.com
  64. 64. Пример перегружаемых форм конструкторов public enum CoffeeSize3 { BIG(100), HUGE, OVERWHELMING(200); private int ml; CoffeeSize3(int ml) { this.ml = ml; } CoffeeSize3() { this.ml = -1; } public int getMl() { return ml; } } www.examclouds.com
  65. 65. Задание 1. Перечисление должно содержать переменную, содержащую среднюю температуру в каждом времени года. 2. Добавить конструктор принимающий на вход среднюю температуру. www.examclouds.com
  66. 66. Объявление перечислений Перечисления могут быть объявлены: • отдельным классом, • как член класса. Но НЕ могут быть объявлены внутри метода. www.examclouds.com
  67. 67. Пример объявления перечисления в качестве члена класса public class CoffeeTest2 { public static void main(String[] args) { Coffee3 drink = new Coffee3(); // имя внешнего класса необходимо drink.size = Coffee3.CoffeeSize.BIG; } } public class Coffee3 { enum CoffeeSize { BIG, HUGE, OVERWHELMING } CoffeeSize size; } www.examclouds.com
  68. 68. Пример объявления перечисления в методе public class CoffeeTest3 { public static void main(String[] args) { // Неправильно! Нельзя объявлять перечисления внутри метода! /*enum CoffeeSize {BIG, HUGE, OVERWHELMING} Coffee drink = new Coffee(); drink.size = CoffeeSize.BIG;*/ } } www.examclouds.com
  69. 69. Переопределение методов public enum CoffeeSize4 { BIG(100), HUGE(150), OVERWHELMING(200) { @Override public String getLidCode() { return "A"; } }; private int ml; CoffeeSize4(int ml) { this.ml = ml; } public int getMl() { return ml; } public String getLidCode() { return "B"; } } www.examclouds.com
  70. 70. Переопределение методов public class CoffeeSizeLidCodeDemo { public static void main(String[] args) { for (CoffeeSize4 coffeeSize : CoffeeSize4.values()) { System.out.println(coffeeSize + " " + coffeeSize.getLidCode()); } } } www.examclouds.com
  71. 71. Задание 1. Создать метод getDescription, возвращающий строку “Холодное время года”. 2. Переопределить метод getDescription - для константы Лето метод должен возвращать строку “Теплое время года”. 3. В цикле распечатки времен года, вывести на консоль среднюю температуру и описание времени года. www.examclouds.com
  72. 72. Перечисления могут реализовывать интерфейсы public enum Currency implements Runnable { PENNY(1), NICKLE(5), DIME(10), QUARTER(25); private int value; Currency(int value) { this.value = value; } @Override public void run() { System.out.println("Перечисления в Java могут реализовывать инт } } www.examclouds.com
  73. 73. Лекции, задания, видео, тесты и вопросы на: • https://www.examclouds.com/ru/java/java-core- russian/lesson10 • Подписывайтесь на страницу: https://www.facebook.com/Examclouds • Подписывайтесь на канал https://www.youtube.com/c/tatyanamilkina www.examclouds.com

×