zoukankan      html  css  js  c++  java
  • java 接口的概念

    一:概念

    接口是功能的集合。同样可以看做一种数据类型,是比抽象类更为抽象的“类”。

    接口描述应该具备的方法,并没有具体的实现。具体实现由接口的实现类(相当于接口的子类来完成)。

    好处:

    使功能和实现分离,优化了程序设计。

    二:语法

    使用关键字interface关键字来定义。

    定义的接口文件仍然是.java文件。虽然声明的时候使用interface关键字,编译之后仍然是.class

    文件。接口我们可以把他看做是一种只包含了功能声明的特殊类。

    定义格式:

    public   interface   接口名字{

        抽象方法1(public abstract 返回值类型 方法名字(参数列表);)

      抽象方法1(public abstract  返回值类型 方法名字(参数列表);)

         抽象方法1(public abstract  返回值类型 方法名字(参数列表);)

          .......

    }

     1 package com.company;
     2 
     3 public interface Myinterface {
     4     /**
     5      *接口定义:
     6      * 修饰符  interface  接口名字
     7      * 方法的定义:
     8      * public abstract  返回值类型 方法名字 (参数列表)
     9      * 其中 public 修饰符必须是 public  或者不写,不写该方法的访问权限也是public。方法为抽象方法,所以用abstract来修饰.
    10      * 成员的变量的定义:必须是常量且修饰符为public .
    11      */
    12     public static final  int  c=22;
    13     public abstract int  myinter();
    14 }

    注意:

    在接口内的方法,必须是public修饰符,以及为抽象方法(abstract)。

    三:接口的实现

    我们把实现接口的类叫做接口的实现。

     1 package com.company;
     2 
     3 /**
     4  * 接口的实现语法:
     5  * 使用关键字implements.
     6  * 修饰符 类名字  implements 接口名字{
     7  *     public  返回值类型  抽象方法的名字{
     8  *         方法体.
     9  *     }
    10  * }
    11  *              类的名字   关键字      接口名字
    12  * public class Myimple  implements Myinterface
    13  */
    14 
    15 
    16 
    17 public class Myimple  implements Myinterface {
    18     public int  myinter(){
    19         return 2;
    20     };
    21 }

    注意:

     在接口中默认方法都是抽象的(abstract),不管是否使用public abstract,都一样

    抽象的方法重写,修饰符是public  注意访问权限 只能是public.而且是普通方法。(没有abstract,abstract是抽象方法的定义。)

     类是接口的实现,类似于类是接口的子类,接口继承。但是实际上类是接口的实现。

    如果接口中有多个抽象方法,实现类需要把接口的抽象方法都一一实现。

    接口类的中的抽象方法和接口的成员变量访问权限都是public,写和不写都是这个权限,实现类中的方法的权限也必须是public。否则报错!!!

     如果一个实现类中并没有实现接口的所有的抽象方法,如果依然是普通类,会报错,普通类需要实现所有的接口的方法,而实现类变为抽象类就不会报错。也就是说

    实现部分接口的抽象方法,实现类是抽象类。

    接口:

     1 package com.company;
     2 
     3 public interface Myinterface {
     4     /**
     5      *接口定义:
     6      * 修饰符  interface  接口名字
     7      * 方法的定义:
     8      * public abstract  返回值类型 方法名字 (参数列表)
     9      * 其中 public 修饰符必须是 public  或者不写,不写该方法的访问权限也是public。方法为抽象方法,所以用abstract来修饰.
    10      * 成员的变量的定义:必须是常量且修饰符为public .
    11      */
    12     public static final  int  c=22;
    13     public abstract int  myinter();
    14     public abstract void myinter1();
    15 } 

    实现类:

    1 public abstract class Myimple  implements Myinterface {
    2     public int  myinter(){
    3         return 2;
    4     };
    5 }

    调用:

    通过初始化实现类对象来调用相应的方法:

    1 package com.company;
    2 
    3 public class Mytest {
    4     public static void  main(String ... arg){
    5         Myimple shixian=new Myimple();
    6         System.out.println(shixian.myinter());
    7     }
    8 }

     接口的多实现:

    类的继承只能单继承,而接口不一样,可以同实现类实现多个接口,这个也是比抽象类更加灵活。

    实现类C可以同时实现接口A和B。

    接口A:

     1 package com.company;
     2 
     3 public interface Myinterface {
     4     /**
     5      *接口定义:
     6      * 修饰符  interface  接口名字
     7      * 方法的定义:
     8      * public abstract  返回值类型 方法名字 (参数列表)
     9      * 其中 public 修饰符必须是 public  或者不写,不写该方法的访问权限也是public。方法为抽象方法,所以用abstract来修饰.
    10      * 成员的变量的定义:必须是常量且修饰符为public .
    11      */
    12     public static final  int  c=22;
    13     public abstract int  myinter();
    14 
    15 }

     接口B:

    1 package com.company;
    2 
    3 public interface Myinterfac_b {
    4     public abstract int myinter();
    5 }

     实现C:

    1 public  class Myimple  implements Myinterface ,Myinterfac_b{
    2     public int  myinter(){
    3         return 2;
    4     };
    5 }

    因为接口A 和B的抽象方法是一样,所以实现类C可以重写一个类即可。

    但是前提:

    1:重写方法 返回值一样。如果不一样的话,需要分别实现,不能一起实现。

    2:如果方法的参数列表不一样。我们可以重载。

     接口A:

     1 package com.company;
     2 
     3 public interface Myinterface {
     4     /**
     5      *接口定义:
     6      * 修饰符  interface  接口名字
     7      * 方法的定义:
     8      * public abstract  返回值类型 方法名字 (参数列表)
     9      * 其中 public 修饰符必须是 public  或者不写,不写该方法的访问权限也是public。方法为抽象方法,所以用abstract来修饰.
    10      * 成员的变量的定义:必须是常量且修饰符为public .
    11      */
    12     public static final  int  c=22;
    13     public abstract int  myinter(String a);
    14 
    15 }

     接口B:

    1 package com.company;
    2 
    3 public interface Myinterfac_b {
    4     public abstract int myinter();
    5 }

     实现C:

    package com.company;
    
    public class Mytest {
        public static void  main(String ... arg){
            Myimple shixian=new Myimple();
            System.out.println(shixian.myinter());
            System.out.println(shixian.myinter("ok"));
        }
    }

     

    注意:

    决定方法的差异是方法的签名,方法的签名包含方法的名字和参数!

    接口的多继承:

    接口可以进行多继承,但是最后子接口,在被实现的时候,需要实现所有父接口的抽象方法。也就是说在java中有多继承的概念。

    接口A:

     1 public interface Myinterface {
     2     /**
     3      *接口定义:
     4      * 修饰符  interface  接口名字
     5      * 方法的定义:
     6      * public abstract  返回值类型 方法名字 (参数列表)
     7      * 其中 public 修饰符必须是 public  或者不写,不写该方法的访问权限也是public。方法为抽象方法,所以用abstract来修饰.
     8      * 成员的变量的定义:必须是常量且修饰符为public .
     9      */
    10     public static final  int  c=22;
    11     public abstract int  myinter(String a);
    12 
    13 }

     接口B:

    1 package com.company;
    2 
    3 public interface Myinterfac_b {
    4     public abstract int myinter();
    5 }

    接口C:

    1 package com.company;
    2 
    3 public interface Myinter_c extends Myinterfac_b,Myinterface {
    4     public abstract double myinter_c();
    5 }

    实现:

     1 public  class Myimple  implements Myinter_c{
     2     public int  myinter(){
     3         return 2;
     4     };
     5 
     6     @Override
     7     public int myinter(String a) {
     8         return 3;
     9     }
    10     public double myinter_c(){
    11         return 4;
    12     }
    13 }

     调用:

     1 package com.company;
     2 
     3 public class Mytest {
     4     public static void  main(String ... arg){
     5         Myimple shixian=new Myimple();
     6         System.out.println(shixian.myinter());
     7         System.out.println(shixian.myinter("ok"));
     8         System.out.println(shixian.myinter_c());
     9     }
    10 }

     注意:

    最后实现:如果实现的C的接口时候,实现类中需要把各个抽象方法都要一一实现。这叫做接口的多继承。

    抽象类和接口的区别:

    抽象类:是事务共有的功能,但是功能由于具体的对象的不同导致实现内容不一样。

    接口:是事务额外的功能,如果事务想具备这个功能,需要定义相应的接口,由实现类来实现。

    人的共有的功能:吃和睡觉。但是每个吃什么和怎么睡觉是不一样的。但都属于人的共有的功能。人是否编程功能,不一定,属于人的额外功能。所以吃和睡是抽象,编程是接口。

     抽象类:

    1 package com.company;
    2 
    3 public abstract class Person_t {
    4     public abstract void  eat();
    5     public  abstract void sleep();
    6     public String work(){
    7         return "make money";
    8     }
    9 }

    接口:

    1 package com.company;
    2 
    3 public interface Per_in {
    4     public abstract void  biancheng();
    5 }

    实现类和实现抽象类的抽象方法:

     1 package com.company;
     2 
     3 
     4 
     5 public class Beav extends  Person_t implements Per_in {
     6     public void eat(){
     7         System.out.println("apple");
     8     }
     9     public void sleep(){
    10         System.out.println("sleep at 500");
    11     }
    12     public void  biancheng(){
    13         System.out.println("java");
    14     }
    15 }

     调用类:

     1 package com.company;
     2 
     3 public class Per_Test {
     4     public  static void  main(String ... args){
     5         Person_t new_Per=new Beav();
     6         new_Per.eat();
     7         new_Per.sleep();
     8         Beav new_be=new Beav();
     9         new_be.biancheng();
    10     }
    11 }

     注意:

    抽象类中不一定只有抽象方法,也可以有普通方法。抽象类通过子类来调用和实现抽象方法和普通方法。

    接口只有抽象方法和常量。没有普通方法。

    接口需要实现(implements),抽象方法需要继承(extends),抽象是多态实现,而接口是功能和实现分离。

     接口也可以这么写  接口  变量 =new  子类的构造器();这是接口的多态。

     1 package com.company;
     2 
     3 public class Per_Test {
     4     public  static void  main(String ... args){
     5         Person_t new_Per=new Beav();
     6         new_Per.eat();
     7         new_Per.sleep();
     8         Per_in new_be=new Beav();
     9         new_be.biancheng();
    10     }
    11 }

    多态是指对象在不同的情形下,对应的类型不同。接口通过实现类来实现多态,类通过继承,子类实现多态。

  • 相关阅读:
    联想 Vibe Shot(Z90-3) 免recovery 获取ROOT权限 救砖 VIBEUI V3.1_1625
    联想 Z5S(L78071)免解锁BL 免rec 保留数据 ROOT Magisk Xposed 救砖 ZUI 10.5.370
    联想 Z5(L78011) 免解锁BL 免rec 保留数据 ROOT Magisk Xposed 救砖 ZUI 10.5.254
    联想 S5 Pro(L78041)免解锁BL 免rec 保留数据 ROOT Magisk Xposed 救砖 ZUI 5.0.123
    第二阶段 冲刺八
    第二阶段 冲刺七
    第二阶段 冲刺六
    第二阶段 冲刺五
    代码大全阅读笔记03
    学习进度十二
  • 原文地址:https://www.cnblogs.com/evilliu/p/7687558.html
Copyright © 2011-2022 走看看