Java SE 7、接口


接口

  1. 接口就是给出一些没有实现的方法,封装到一起,到某个类要使用的时候,在根据具体情况把这些方法写出来

  2. 语法

    • interface 接口名{

      ​ //属性

      ​ //方法

      }

    • class 类名 implements 接口{

      ​ 自己属性;

      ​ 自己方法;

      ​ 必须实现的接口的抽象方法

      }

  3. 在 Jdk7.0 前,接口里的所有方法都没有方法体,即都是抽象方法

    ​ Jdk8.0 后接口可以有静态(static)方法,默认(default)方法,也就是说接口中可以有方法的具体实例

  4. 细节

    1. 接口不能被实例化

    2. 接口中所有的方法是 public 方法,接口中抽象方法,可以不用 abstract 修饰

    3. 一个普通类实现接口,就必须将该接口的所有方法都实现

    4. 抽象类实现接口,可以不用实现接口的方法

    5. 一个类同时可以实现多个接口

    6. 接口中的属性只能是 final 的,而且是 public static final 修饰。

      ​ 比如 int a = 1; 实际上是 public static final int a = 1; (必须初始化)

    7. 接口中属性的访问形式:接口名.属性名

    8. 接口不能继承其他的类,但是可以继承多个别的接口

      ​ interface A extends B,C{}

    9. 接口的修饰符只能是 public 和默认,这点和类的修饰符是一样的

  5. 接口和继承

    • 继承的价值主要在于:解决代码的复用性和可维护性
    • 接口的价值主要在于:设计,设计好各种规范(方法),让其他类去实现这些方法
    • 接口比继承更加灵活,继承是满足 is – a 的关系,而接口只需满足 like – a 的关系
    • 接口在一定程度上可以实现代码解耦 [即:接口规范性 + 动态绑定机制]
  6. 接口多态参数

    • 接口类型的变量 if01 可以指向实现了IF接口类的对象实例

      IF if01 = new Monster();
      if01 = new Car();
      
      interface IF {}
      class Monster implements IF {}
      class Car implements IF {}
      
  7. 接口多态数组

    public class Interface01 {
        public static void main(String[] args) {
    
            //多态数组 -> 接口类型数组
            Usb[] usbs = new Usb[2];
            usbs[0] = new Phone_();
            usbs[1] = new Camera_();
    
            for (int i = 0; i < usbs.length; i++) {
                usbs[i].work(); //动态绑定
    
                //类型的向下转换
                if (usbs[i] instanceof Phone_) { //判断它的运行类型是
                    ((Phone_) usbs[i]).call();
                }
            }
    
        }
    }
    
    interface Usb {
        void work();
    }
    
    class Phone_ implements Usb {
        public void call() {
            System.out.println("手机可以打电话。。。");
        }
    
        @Override
        public void work() {
            System.out.println("手机工作中、、、");
        }
    }
    
    class Camera_ implements Usb {
        @Override
        public void work() {
            System.out.println("相机工作中...");
        }
    }
    
    /*
    	运行结果:
            手机工作中、、、
            手机可以打电话。。。
            相机工作中...
    */
    
  8. 接口多态传递现象

    public class InterfacePolyPass {
        public static void main(String[] args) {
    
            //接口类型的变量可以指向,实现了该接口的类的对象实例
            IG ig = new Teacher();
            //如果IG 继承了 IH 接口,而Teacher 类实现了 IG接口
            //那么,实际上就相当于 Teacher 类也实现了 IH接口
            //这就是所谓的接口多态传递现象
            IH ih = new Teacher();
        }
    }
    
    interface IH { 
        void hi();
    }
    interface IG extends IH{ }
    class Teacher implements IG {
        @Override
        public void hi() {
            
        }
    }
    

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/289896.html

(0)
上一篇 2022年9月16日
下一篇 2022年9月16日

相关推荐

发表回复

登录后才能评论