一、接口定义

Java接口(Interface),是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。 

接口定义的一般形式为:

[访问控制符]interface <接口名> {
类型标识符final 符号常量名n = 常数;
返回值类型  方法名([参数列表]);
      …
}

 

二、接口的特点

1、Java接口中的成员变量默认都是public,static,final类型的(都可省略),必须被显示初始化,即接口中的成员变量为常量(大写,单词之间用"_"分隔)

2、Java接口中的方法默认都是public,abstract类型的(都可省略),没有方法体,不能被实例化

3、Java接口中只能包含public,static,final类型的成员变量和public,abstract类型的成员方法

4、接口中没有构造方法,不能被实例化

5、一个接口不能实现(implements)另一个接口,但它可以继承多个其它的接口

6、Java接口必须通过类来实现它的抽象方法

7、当类实现了某个Java接口时,它必须实现接口中的所有抽象方法,否则这个类必须声明为抽象类

8、不允许创建接口的实例(实例化),但允许定义接口类型的引用变量,该引用变量引用实现了这个接口的类的实例

9、  一个类只能继承一个直接的父类,但可以实现多个接口,间接的实现了多继承. 

三、接口最简单的实现方法

package com.frewen.interfacedemo;

    interface SwimInterface{   
       void swim();
    }
    class   Fish{   
       int  fins=4;
    }
    class  Duck {   
      int  leg=2;
      void egg(){};
    }
    
    class Goldfish extends Fish implements  SwimInterface {
        @Override
        public void swim() {
             System.out.println("Goldfish  can swim ");
        }  
    }
    
    class SmallDuck  extends Duck implements  SwimInterface { 
       public void egg(){
           System.out.println("SmallDuck  can lay  eggs ");
       }
       @Override
       public void swim() {
           System.out.println("SmallDuck  can swim ");
       }
    }

    public class InterfaceDemo {        
        public static void main(String[] args) {
            Goldfish goldfish=new Goldfish();
            goldfish.swim();

            SmallDuck smallDuck= new SmallDuck();
            smallDuck.swim();
            smallDuck.egg();
    }
}

 接口的最主要的作用是达到统一访问,就是在创建对象的时候用接口创建,【接口名】 【对象名】=new 【实现接口的类】,这样你像用哪个类的对象就可以new哪个对象了,不需要改原来的代码。

假如我们两个类中都有个function()的方法,如果我用接口,那样我new a();就是用a的方法,new b()就是用b的方法

这个就叫统一访问,因为你实现这个接口的类的方法名相同,但是实现内容不同

我用接口来定义对象不就可以做到统一访问了吗?接口主要针对多个类实现它来说的,要是只有一个类当然可以不用接口了.你这样想,我做一个USB接口,有个read()抽象方法,然后mp3类实现,U盘类实现,移动硬盘类实现,这样我用的时候用USB a=new 【类名】;这样a.read();要是我类名里写U盘,就读U盘,写mp3就读mp3,而这个名字可以从属性文件里读,你写哪个就用哪个了

在类的继承中,只能做单重继承,而实现接口时,一次则可以实现多个接口,每个接口间使用逗号“,”分隔。

这时就可能出现常量或方法名冲突的情况,解决该问题时,如果常量冲突,则需要明确指定常量的接口,这可以通过“接口名.常量”实现。如果出现方法冲突时,则只要实现一个方法就可以了。下面通过一个具体的实例详细介绍以上问题的解决方法。