一、接口概述

      abstract class抽象类修饰符

  interface接口的修饰符

  extends只能是一个

  implements可以多个

  接口只有一个抽象方法, 它比抽象类还要抽象,接口是彻彻底底的抽象!

  接口是抽象方法和常量的属性集合。

  接口中只能包含抽象方法和常量,不能够有变量、初始化块,构造器。

  注意事项:

    1、接口中的修饰符只有两种:默认和public

    2、接口中的变量会被设置成共有的、静态的、最终的字段

    int i=1;
    public static final int i=1;

二、接口的实现

 

class 类名 implement 接口1,接口2,接口3{
  
  方法1(){

  }
  方法2(){

  }  
  ......   
}

接口实现的注意事项:

1、为接口中所有的方法提供具体实现。

2、必须遵守重写的所有规则。

3、重写的规则:子类的重写方法不能抛出更大的异常、子类重写方法不能有更小的反问范围

4、保持相同的返回类型

public interface Student {

    int classs=1201;
    
    void learn();
    void eat();
    void sleep();
    
}
public class Student1 implements Student{

    @Override
    public void learn() {
        // TODO Auto-generated method stub
        System.out.println("学生在学习");
    }

    @Override
    public void eat() {
        // TODO Auto-generated method stub
        System.out.println("学生在吃饭");
    }

    @Override
    public void sleep() {
        // TODO Auto-generated method stub
        System.out.println("学生在睡觉");
    }

}
public class Test {

    public static void main(String[] args) {
        Student1 stu=new Student1();
        stu.learn();
        stu.eat();
        stu.sleep();
        System.out.println(Student.classs);
    }
}

多继承也就是继承多个接口

1、这些接口之间需要几个逗号来分割开

2、如果这几个接口都有相同的方法和相同的变量名,那么相同的变量可以通过接口名.变量名的形式来访问,相同的方法将被其中的一个接口使用。

三、接口的应用

1、方法的修饰符

  接口中变量的修饰符:public static final

  接口中方法的修饰符: public abstract

2、接口类型引用变量

package day5;

public class MathTest {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        MTest mt=new MTest();
        System.out.println("使用引用对象调用方法");
        System.out.println("a+b="+mt.add(15,3));
        System.out.println("a-b="+mt.sub(15,3));
        System.out.println("a*b="+mt.cheng(15,3));
        System.out.println("a/b="+mt.chu(15,3));
        
        Add add=mt;
        Sub sub=mt;
        Cheng cheng=mt;
        Chu chu=mt;
        System.out.println("使用接口类型调用方法");
        System.out.println("a+b="+add.add(15,3));
        System.out.println("a-b="+sub.sub(15,3));
        System.out.println("a*b="+cheng.cheng(15,3));
        System.out.println("a/b="+chu.chu(15,3));
    }

    interface Add{
        int add(int a,int b);
    }
    
    interface Sub{
        int sub(int a,int b);
    }
    
    interface Cheng{
        int cheng(int a,int b);
    }
    
    interface Chu{
        int chu(int a,int b);
    }
}
package day5;

import day5.MathTest.Add;
import day5.MathTest.Cheng;
import day5.MathTest.Chu;
import day5.MathTest.Sub;

public class MTest implements Add,Sub,Cheng,Chu {

    @Override
    public int chu(int a, int b) {
        // TODO Auto-generated method stub
        return a/b;
    }

    @Override
    public int cheng(int a, int b) {
        // TODO Auto-generated method stub
        return a*b;
    }

    @Override
    public int sub(int a, int b) {
        // TODO Auto-generated method stub
        return a-b;
    }

    @Override
    public int add(int a, int b) {
        // TODO Auto-generated method stub
        return a+b;
    }

}