i) Чистый абстрактный класс/интерфейс ii) Абстрактный класс iii) Класс iv) Конечный класс v) Внутренний класс vi) Анонимный класс vii) Enum

полиморфизм времени выполнения:

DEF: интерфейс также похож на класс, за исключением того, что в интерфейсе все методы являются абстрактными. Метод не найден с реализациями в интерфейсе. интерфейс должен быть создан с использованием ключевого слова «интерфейс» в начале, за которым следует имя интерфейса. интерфейс должен быть заключен в фигурные скобки. Две точки имп: // MyInterface.java abstract interface MyInterface { int min_age; void method1() {} } Ошибка компиляции javac MyInterface.java говорит о том, что переменные интерфейса являются окончательными, поэтому переменная min_age должна быть инициализирована, а также говорит, что интерфейс не может содержать реализованные методы. // MyInterface.java interface MyInterface { int MIN_AGE=18; недействительный метод1(); } javac MyInterface.java Компилируется файл .java и создается файл .class. В этом файле .class мы заметим // MyInterface.java abstract interface MyInterface { public static final int MIN_AGE=18; публичный абстрактный недействительный метод1(); } В интерфейсе все переменные по умолчанию являются общедоступными статическими окончательными, а все методы по умолчанию являются общедоступными абстрактными. Почему переменные интерфейса являются окончательными по умолчанию, потому что при множественном наследовании возникает проблема неоднозначности переменных суперкласса. Как? class A { } interface B { } } // класс, наследуемый от нескольких суперклассов, является множественным наследованием. Как и в C++, класс D extends A, B, C { } // При множественном наследовании реализованные методы получаются из нескольких суперклассов // В java мы получаем реализованные методы только из одного суперкласса и получаем объявленные/абстрактные методы из нескольких суперклассов. интерфейсы. Следовательно, java - это классы, основанные на многоуровневом наследовании. // далее следует многоуровневый класс наследования D extends AРеализует B, C { System.out.println(x); // 14 System.out.println(this.x); // 13 System.out.println(super.x); //10 System.out.println(B.x); // 11 System.out.println(C.x); // 12

  • В классе E также есть переменная с именем a. При компиляции компилятор успешно соответствует E, потому что переменная класса E может быть вызвана с помощью this.a, а переменная, происходящая из четырех суперклассов, одна переменная повторно инициализирует другую переменную.
  • Но при запуске Java-программы, если мы вызываем super.a, тогда среда выполнения обнаруживает, что найдены четыре суперкласса, а переменная «a» неоднозначно найдена во всех суперклассах, среда выполнения выдает ошибку во время выполнения.
  • Но так как Java поддерживает многоуровневое, но не множественное наследование, мы можем одновременно наследоваться только от одного суперкласса и наследовать от нескольких интерфейсов.
  • Если класс E является производным от класса A и реализует интерфейсы B, C, D. Компилятор принимает, что переменная «a», полученная из A, повторно инициализируется переменной «a», полученной из B, что переменная суперкласса становится окончательной, если одна и та же переменная пытается быть повторно инициализирована, полученная из C и D, компилятор выдает ошибку, говоря, что конечная переменная получена из суперкласса нельзя повторно инициализировать, так как это уже конечная переменная.
  • Следовательно, мы должны избегать наследования E от C и D или изменения имен переменных в C и D.
  • Почему переменные интерфейса тоже статичны? Есть 2 причины: Потому что, если конечная переменная не объявлена ​​как статическая, так как создается много экземпляров интерфейса (имеются в виду экземпляры подклассов интерфейса), в этих многих экземплярах будет выделена память конечной переменной. Потому что интерфейсы не может быть создан экземпляр, к его переменной можно получить доступ напрямую, вызвав interfacename.variablename, поскольку они являются статическими. Почему методы интерфейса по умолчанию абстрактны? а) Вы пишете класс с реализацией 5 методов. Объявите 3 метода как абстрактные в одном интерфейсе и объявите оставшиеся два метода в еще одном интерфейсе. Дайте интерфейс1 одному клиенту, с помощью которого пользователь может получить доступ только к 3 методам класса реализации, но не к двум другим. Дайте интерфейс2 еще одному клиенту, с помощью которого второй пользователь может получить доступ только к последнему классу реализации методов. E:\active\core\am3\javalang\oops\полиморфизм наследования абстракции\интерфейс // interface1.java interface interface1 { public void method1(); публичный недействительный метод2(); публичный недействительный метод3(); } // interface2.java interface interface2 { public void method4(); публичный недействительный метод5(); } Почему интерфейс назван интерфейсом? С помощью интерфейсов класс может иметь множество лиц. // Класс InterfaceImplementationClass.java Класс InterfaceImplementationClass реализует interface1, interface2 { public void method1() { System.out.println("вызван метод1()"); } public void method2() { System.out.println("вызван метод2()"); } public void method3() { System.out.println («вызван метод 3()»); } public void method4() { System.out.println («вызван метод method4()»); } public void method5() { System.out.println («вызван метод5()»); } } // Открытый класс Client1.java Client1 { public static void main(String rags[]) { interface1 i1=new InterfaceImplementationClass(); i1.метод1(); i1.метод2(); i1.метод3(); // i1.method5(); // не удается найти символ } } // Открытый класс Client2.java Client2 { public static void main(String rags[]) { interface2 i2=new InterfaceImplementationClass(); // i2.method2(); // не удается найти символ // i2.method3(); // не удается найти символ i2.method4(); i2.метод5(); } } Суперкласс, заставляющий реализовывать методы в подклассе: Почему суперкласс заставляет подклассы реализовывать свои методы, чтобы поддерживать одинаковое количество методов во всех подклассах. Благодаря этой функции программы Java стали независимыми от поставщиков. Например, наши классы Java иногда выполняются в других средах выполнения, таких как веб-сервер, сервер приложений, БД и т. д. Если сервер ожидает, что какие-то наши методы будут запускать их во время выполнения. Веб-сервер косвенно заставляет нас реализовывать из интерфейса, если мы не реализуем все методы, производные от интерфейса, наш класс не может быть скомпилирован. Например, Servlet, Runnable, Cloneable и т. д.

Классы EmpPayroll, Admin, Sales,ProdEmpPayroll. Printer, STDOUTPrinter, FilePrinter Emp, EmpV1, EmpV2, EmpV3 и т. д.

Уменьшение бремени перегрузки метода:

Метод print() класса вывода принимает объект типа интерфейса принтера в качестве аргумента. Подклассами интерфейса принтера могут быть STDOUTPrinter, File Printer, DB Printer, Socket Printer, Printer Printer, Cloud Printer.

Предположим, что класс E является производным от классов A, B, C, D, в которых переменная объявляется общим образом во всех суперклассах, инициализированных разными значениями.

Первоначально опубликовано на «https://techchannelwithdsk.blogspot.com».

Различные типы классов в Java