Что такое интерфейс Java и абстрактный класс и в чем разница

Java задняя часть алгоритм API

Abstract (абстрактный) и interface (интерфейс) являются ключевыми словами в Java, а это значит, что они достаточно важны, а абстрактные классы и интерфейсы оказывают нам большую помощь в объектно-ориентированном программировании. Давайте повторим эти базовые знания вместе.

  • абстрактный класс

    • Интерфейсы могут быть первым, о чем вы думаете при создании классов, которые не реализуют методы, но абстрактные классы также являются важным и необходимым инструментом для этой цели.

    • Чтобы создать абстрактный класс, вам нужно использовать ключевое слово abstract для изменения класса. Мы надеемся использовать ряд методов класса через этот общий класс. Если нет конкретного содержания, значение этого абстрактного класса только одно, что заключается в том, чтобы другие классы не могли создавать экземпляры этого объекта абстрактного класса, могут быть созданы только его объекты подкласса; для достижения манипуляции Java предоставляет нам механизм абстрактных методов, а абстрактные методы также модифицируются с помощью ключевого слова abstract.Класс, содержащий абстрактные методы, называется абстрактным классом.

    • Особенности абстрактного класса

        1. Абстрактные классы и абстрактные методы должны быть украшены ключевым словом abstract
        1. Абстрактный класс не обязательно имеет абстрактный метод, класс с абстрактным методом должен быть абстрактным классом или интерфейсом.
        1. Абстрактные классы не могут быть созданы, то есть они не могут быть новыми.Абстрактные классы должны быть созданы подклассами.Это фактически тип полиморфизма.Полиморфизм абстрактных классовПочему нельзя создавать экземпляры абстрактных классов?Если создан экземпляр абстрактного класса, экземпляр объекта абстрактного класса может вызвать абстрактный метод абстрактного класса, но абстрактный метод не имеет конкретной реализации, поэтому он не имеет смысла, поэтому экземпляр абстрактного класса не может быть создан)
        1. Подкласс абстрактного класса является либо абстрактным классом (класс Car в экземпляре), либо переопределяет абстрактный метод в абстрактном классе (класс Jetta в экземпляре).
        1. Класс может наследовать только один абстрактный класс, а абстрактные классы также могут наследовать абстрактные классы (класс SuperCar в экземпляре).
    • Особенности членов абстрактного класса:

        1. Члены могут быть как константами, так и переменными, но абстрактные не могут изменять переменные-члены, а значение переменных не фиксировано и не может быть абстрагировано.
        1. У абстрактного класса также есть конструктор, его смысл в том, что подкласс может получить доступ к данным инициализации родительского класса (конструктор Jetta super() в экземпляре вызывает конструктор абстрактного родительского класса)
        1. Методы-члены могут быть абстрактными или неабстрактными. Абстрактные методы обычно должны реализовываться подклассами. Неабстрактные методы обычно представляют собой повторяющийся код, который может улучшить повторное использование кода.
        1. Ключевое слово abstract нельзя сочетать с ключевым словом static (принцип и тот факт, что абстрактный класс не может быть создан, является той же причиной,Абстрактный метод, измененный staticx, может быть вызван напрямую без создания экземпляра, что, очевидно, бессмысленно.), конечное ключевое слово (Подклассы методов, модифицированные в Final, не могут быть переопределены, а подклассы методов, модифицированные абстрактно, принудительно переопределены.), приватный ключ появляется одновременно (Подклассы приватно оформленных методов не могут получить доступ)
    • пример

      /**
       * @Author: mao.qitian
       * @Date: 2018/8/11 0011 16:25
       * @Description: 汽车抽象类
       */
      public abstract class Car {
      
      public Car(){
          System.out.println("抽象类的构造方法被调用");
      }
      
      public void driver(){
          System.out.println("所有汽车都能驾驶");
      }
      //汽车的速度
      public abstract void speed();
      } 
      
      /**
       * @Author: mao.qitian@gxxmt.com
       * @Date: 2018/8/11 0011 16:29
       * @Description: 捷达
       */
       public class Jetta extends Car{
       
       public Jetta(){
          super();
       }
       
       @Override
       public void speed() {
          System.out.println("开完兰博基尼再开捷达速度上无法适应");
         }
       }
       
       
      /**
       * @Author: mao.qitian
       * @Date: 2018/8/11 0011 22:39
       * @Description: 超跑
       */
      public abstract class SuperCar extends Car {
      //超跑的价格
      public abstract void expensive ();
      }
      
      /**
       * @Author: mao.qitian
       * @Date: 2018/8/11 0011 16:27
       * @Description: 兰博基尼
       */ 
      public class Lamborghini extends SuperCar {
      @Override
      public void speed() {
          System.out.println("兰博基尼速度两秒破百");
      }
      
      @Override
      public void expensive() {
       }
      } 
      
  • интерфейс

    • Интерфейс делает абстрактный шаг вперед.Ключевое слово interface изменяет метод для создания полностью абстрактного класса, который позволяет создателю определить имя метода, параметр и тип возвращаемого значения, но он не имеет никакого тела метода, только предоставляет форму (правила), не предоставляя какой-либо конкретной реализации.

    • Особенности интерфейса

        1. Интерфейс использует ключевое слово interface вместо class для изменения класса,
        1. Интерфейс реализации класса представлен реализовать
        1. Как и абстрактные классы, интерфейсы не могут быть созданы, они могут быть созданы только классами, которые реализуют интерфейс.
        1. Подкласс интерфейса может быть абстрактным классом или конкретным классом.Конкретный класс должен переопределять абстрактные методы интерфейса.
    • Функции члена интерфейса

        1. Переменные, определенные в интерфейсе, являются константами, а модификатор по умолчанию — public static final.
        1. Интерфейс не имеет конструктора
        /**
         * @Author: mao.qitian
         * @Date: 2018/8/12 0012 0:22
         * @Description:
         */
        public interface A {
          public  void b();
         }
        
         class C implements A{
          public C(){
          super();//调用的是Objetc类的构造方法,方法默认继承Objetc类
          }
         @Override
          public void b() {
          }
         }
        
        1. Методы-члены в интерфейсе могут быть только абстрактными методами, а модификатор по умолчанию — public abstract.
        1. Все методы-члены и переменные в интерфейсе являются общедоступными (public)
    • Применение интерфейса

      • Режим стратегии:Определите серию алгоритмов, инкапсулируйте каждый алгоритм и сделайте их взаимозаменяемыми. Паттерн стратегии позволяет алгоритму изменяться независимо от клиента, использующего его..

      • три роли

        • Контекстная роль (Context): манипулировать контекстом, в котором мы формулируем стратегию, и использовать общий вызов стратегии.
        • Роль абстрактной стратегии (Stratagety): стратегия, абстракция алгоритма, обычно интерфейс.
        • Роль реализации стратегии (ConcreteStratagety): реализация абстрактного интерфейса стратегии и конкретная реализация стратегии.
        • пример
        实现学校教师的奖金发放,教师有属性:编号、姓名,教学总工作量,奖金
        奖金的计算方法为:
                        x*30   (当职称为教授时)
               y=       x*25   (当职称为副教授时)
                        x*20    (当职称为讲师时)
        
        public interface Function {                             
        //接口定义抽象方法 (Stragety)
        public double Money(double x);
        }
        
        public class A implements Function  {
          //教授奖金计算
          public double Money(double x) {
          return x*30;
          
         }
        
         public class B implements Function {
         //副教授奖金计算
         public double Money(double x) {
          return x*25;
          }
         }
        
        public class C implements Function {
          //讲师奖金计算
          public double Money(double x) {
          return x*20;
          }
        }
        public class myMoney {
         //上下文角色
         Function s;
         double M;//工时
         String name;//教师姓名
         String type;//教师职称
         int number;//教师编号
        
         public void S(double X,String N,int Num,String Type){
         this.M=X;
         this.name=N;
         this.number=Num;
         this.type=Type;
         }
         //奖金计算方式
         public double getMoney(){
         if(type.equals("教授")) s=new A();
         if(type.equals("副教授")) s=new B();
         if(type.equals("讲师")) s=new C();
         return s.Money(M);
           }
         }
        
         myMoney f=new myMoney();
          	     Scanner sc=new Scanner(System.in);
          	     System.out.println("请输入职位:");
          	     String Type=sc.next();
          	     System.out.println("请输入姓名:");
          	     String N=sc.next();
          	     System.out.println("请输入编号:");
          	     int Num=sc.nextInt();
          	     System.out.println("请输入工时:");
          	     double X=sc.nextDouble();
          	     f.S(X, N, Num, Type);
          	     System.out.println(N+奖金为"+f.getMoney());
        
  • Связь между классом и классом, классом и интерфейсом, интерфейсом и интерфейсом

    • Между классами класс может наследовать только один класс, но классы могут наследовать несколько слоев.
    • Классы и интерфейсы являются отношениями реализации.Класс может наследовать интерфейс, или наследовать несколько интерфейсов, или наследовать класс и реализовывать несколько интерфейсов одновременно.
    • Между интерфейсами существует отношение наследования.Интерфейс может наследовать другой интерфейс или несколько интерфейсов.
    /**
     * @Author: mao.qitian
     * @Date: 2018/8/12 0012 0:22
     * @Description:
     */
     public interface A {
      public  void a();
      }
     interface B {
      public  void b();
      }
     interface C extends B,A{ //接口与接口之间继承,多继承
      public  void c();
      }
      class D implements A,B,C{
      @Override
      public void a() { }
      @Override
      public void b() { }
      @Override
      public void c() { }
      }
    
  • Разница между абстрактным классом и интерфейсом

Добрый Отличие членства Разница в отношениях наследования Разница в концепции дизайна
абстрактный класс Переменные-члены могут быть константами или переменными, существуют конструкторы, а методы-члены могут быть абстрактными или неабстрактными. Одиночное наследование, многоуровневое наследование Воплощением наследования является отношение «есть», а абстрактный класс определяет общую функцию системы наследования.
интерфейс Переменные-члены могут быть только константами, конструктора нет, а методы-члены могут быть только абстрактными. Реализация, может реализовать несколько интерфейсов Унаследованный вариант осуществления представляет собой отношение «как», и интерфейс определяет расширенную функцию унаследованного варианта осуществления.

наконец

Все то же предложение, хорошая память не так хороша, как плохое письмо Благодаря этой статье базовые знания были снова закреплены. Если в статье что-то не так, пожалуйста, оставьте сообщение и укажите на это, каждый может учиться и развиваться вместе.