JDK1.8_interface

Interface composition:

1. Variable public static final

1.定义格式:不写static final 默认也有
    public static final 数据类型 变量名 =2.使用:
    接口名直接调用
3.注意事项:
   a.不能被二次赋值
   b.需要我们手动赋值
   c.不写static final 默认也有
   d.在接口中,一般定义变量,变量名需要大写(习惯)
public interface USB {
    
    
    public static final int NUM = 10;
    int i = 20;
}
public class Test {
    
    
    public static void main(String[] args) {
    
    
        System.out.println(USB.NUM);
    }
}

2. Abstract method

1.定义格式:即使不写abstract 默认也有
  public abstract 返回值类型 方法名(参数);
2.使用:
  a.定义一个实现类,实现接口-->   类名 implements 接口名
  b.重写接口中的所有抽象方法
  c.创建实现类对象(接口不能直接new对象),调用重写的方法
public interface USB {
    
    
    public abstract void open();
    public void close();
    void method();

}
public class Mouse implements USB{
    
    
    @Override
    public void open() {
    
    
        System.out.println("我要打开了");
    }

    @Override
    public void close() {
    
    
        System.out.println("我要关闭了");
    }

    @Override
    public void method() {
    
    
        System.out.println("我是个method方法");
    }
}
public class Test {
    
    
    public static void main(String[] args) {
    
    
        Mouse mouse = new Mouse();
        mouse.open();
        mouse.close();
        mouse.method();
    }
}

3. The default method jdk1.8

When you don't want to rewrite part of the method in the interface, then set the part of the method as the default method.
Insert picture description here

1.定义格式:
    修饰符 default 返回值类型 方法名(参数){
    
    
        方法体
        return 结果;
    }
2.使用:
   a.定义实现类  实现 接口   implements
   b.实现类中可以重写(在增强接口中的功能时),也可以不重写
   c.创建实现类对象,去调用方法
//接口中默认方法
public interface USB {
    
    
    public default void open(){
    
    
        System.out.println("人家要开启了,进来吧!");
    }
}
//实现类实现接口后,可以重写默认方法,也可以不重写默认方法
public class KeyBorad implements USB{
    
    
    @Override
    public void open(){
    
    
        System.out.println("人家要开启了,进来吧!啊~");
    }
}
public class Test {
    
    
    public static void main(String[] args) {
    
    
        KeyBorad keyBorad = new KeyBorad();
        keyBorad.open();
    }
}

4. Static method jdk1.8

When preventing multiple inheritance interfaces, you don't know who will call the corresponding method, so when you introduce static methods, you can only call the corresponding static methods through the interface.
Insert picture description here

1.定义格式:
   修饰符 static 返回值类型 方法名(参数){
    
    
       方法体
       return 结果
   }
2.使用:
   接口名直接调用
public interface USB {
    
    
    public static void open(){
    
    
        System.out.println("我打开了,进来吧!啊~");
    }
}
public class Test {
    
    
    public static void main(String[] args) {
    
    
        USB.open();
    }
}

5. Private method jdk1.9

Insert picture description here

public interface Eat {
    
    
    default void defMethod() {
    
    //默认方法可以调用私有的静态和非静态方法
        priMethod();
    }
    static void staticMethod() {
    
     //静态方法必须调用私有的静态方法
        priMethod();
    }
    static void priMethod() {
    
      //私有静态方法  没有加private关键字
        System.out.println("东方大道多多多");
    }
}
    public static void main(String[] args) {
    
    

            Eat.staticMethod();//静态方法,直接由接口调用即可
        System.out.println("==============");
            EatImpl eat = new EatImpl();
            eat.defMethod();//默认方法,用对象直接调用即可

        }

6. Features of the interface

1.接口可以多实现(一个实现类可以同时实现多个接口)-->必须要重写所有接口中的所有抽象方法
   类 implements 接口1,接口2
2.接口可以多继承(一个接口可以同时继承一个或者多个接口)
   接口 extends 接口1,接口2..
3.一个类可以继承一个父类的同时实现一个或者多个接口
   类 extends 父类 implements 接口1,接口2
   
   
注意事项:
   1.一个类继承一个父类的同时实现一个或者多个接口,要重写所有的抽象方法
   2.如果两个接口中有重名的抽象方法,那么我们就可以重写一个
   3.如果两个接口中有重名的默认方法,那么我们必须重写一个
   4.如果接口中有和父类的方法一样的默认方法,那么我们先执行父类的
   5.父接口中如果有重名的默认方法,那么子接口中要重写一次
   

7. The difference between interface and abstract class

在这里插入代码片抽象类:
   一般作为父类来使用,什么都可以有  构造 成员变量 普通方法 静态方法 抽象方法
接口:功能的集合
   都是作为标准-->抽取的都是方法
**相同点:**

​	 都位于继承的顶端,用于被其他类实现或继承;

​	 都不能直接实例化对象;

​	 都包含抽象方法,其子类都必须覆写这些抽象方法;

**区别:**

 	抽象类为部分方法提供实现,避免子类重复实现这些方法,提高代码重用性;接口只能包含抽象方法;

 	一个类只能继承一个直接父类(可能是抽象类),却可以实现多个接口;(接口弥补了Java的单继承)

 	抽象类为继承体系中的共性内容,接口为继承体系中的扩展功能

- 成员区别

  - 抽象类
    - 变量,常量;有构造方法;有抽象方法,也有非抽象方法
  - 接口
    - 常量;抽象方法

- 关系区别

  - 类与类
    - 继承,单继承
  - 类与接口
    - 实现,可以单实现,也可以多实现
  - 接口与接口
    - 继承,单继承,多继承

- 设计理念区别

  - 抽象类

    - 对类抽象,包括属性、行为

  - 接口

    - 对行为抽象,主要是行为
讲完抽象类和接口后,相信有许多同学会存有疑惑,两者的共性那么多,只留其中一种不就行了,这里就得知道抽象类和接口从根本上解决了哪些问题.

	一个类只能继承一个直接父类(可能是抽象类),却可以实现多个接口, 接口弥补了Java的单继承

	抽象类为继承体系中的共性内容, 接口为继承体系中的扩展功能

	接口还是后面一个知识点的基础(lambada)

Guess you like

Origin blog.csdn.net/weixin_47785112/article/details/109256754