接口

作者: 小疏林er | 来源:发表于2020-04-16 19:40 被阅读0次

    1、接口

    接口就是比抽象类还抽象的抽象类,可以更加规范的对子类进行约束。
    接口的本质是契约,定义的是一组规则,就像法律一样,制定好了大家都要遵守。

    • 特性:
      (1)接口中每一个方法也是隐式抽象的,接口中的方法会被隐式的指定为 public abstract,写不写都是这个(只能是 public abstract,其他修饰符都会报错)。
      (2)接口中可以含有变量,但是接口中的变量会被隐式的指定为 public static final 变量,写不写都是这个(并且只能是 public,用 private 修饰会报编译错误)。
      (3)接口中的方法是不能在接口中实现的,只能由实现接口的类来实现接口中的方法。

    2、接口的使用

    (1)接口的声明
    [访问修饰符] interface 接口名 [extends 父接口1,父接口2。。。]{
          常量定义      //一定是public static final
          方法定义      //一定是public abstract
    }
    
    (2)接口的实现
    [访问修饰符] class 类名 implements 父接口{
          自己的变量、常量等等
          要实现的接口中的方法。。。。
    }
    
    (3)示例

    我们想把猫、狗、猪的移动、吃等方法抽象出来进行规范,这时候只要定义一个抽象类Animal,并向其中添加动、吃等抽象方法,再由猫、狗等继承即可。

    但是我们想把汽车、鸟、火箭、海马的移动方法抽象出来,再通过让他们继承抽象类的方式未免有些牵强,因为他们本就是风马牛不相及的几类东西,这时候让他们继承同一个类不太现实,并且海马、鸟本身还可能继承了Animal类,由于类是单继承的,所以它们不能再继承其他类了。所以这时候就需要用到接口了,因为他的抽象级别更高,通常用来抽象功能,这时候用接口就十分合适了。

    • Move.class(接口的后缀名也是class)
    public interface Move {
        int Max_Speed = 100;        //public static final int
        int Min_Speed = 10;         //public static final int
        void move ();
    }
    
    • Car.class
    class Car implements Move{
        static String name = "拖拉机";
        @Override
        public void move() {
            System.out.println(name+"最大速度为"+Max_Speed);
        }
    }
    
    • Bird.class
    class Bird implements Move{
        String name = "小红";
        int Min_Speed = 20;
        @Override
        public void move() {
            System.out.println(name+"最小速度为"+Min_Speed);
        }
        
    }
    
    • Test_Interface.class
    public class Test_Interface {
        public static void main(String[] args) {
            Car c = new Car();      
            Bird b = new Bird();
            c.move();
    //      c.Min_Speed = 1;  //final 常量不可更改
            b.move();
            b.Min_Speed  = 30;//父子存在同名变量,父类的变量将被隐藏,子类中此变量不是常量故可改
            b.move();
        }
    }
    
    注:
    • 子类的成员变量如果和父类的成员变量相同(包括类型不同)父类的成员变量将会被隐藏。
    • 常量不可修改,变量通常设成私有,然后通过get、set方法进行读写。


      image.png

    3、接口和类的区别

    • 接口不能用来实例化对象。
    • 接口没有构造方法。
    • 接口支持多继承(只能继承其他接口),类只能单继承。

    4、接口和抽象类的区别

    • 抽象类要被子类继承,接口要被类实现。
    • 抽象类主要用来抽象类别,接口主要用来抽象功能。(接口的抽象级别最高)
    • 一个类只能继承一个抽象类,而一个类却可以实现多个接口。
    • 抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是 public static final 类型的。

    相关文章

      网友评论

          本文标题:接口

          本文链接:https://www.haomeiwen.com/subject/ssjcvhtx.html