• Java中的接口


    什么是接口

    1. 接口类似于抽象类,但它并不是类。
    2. 接口用interface修饰,格式是 interface 接口名{}
    3. 接口是抽象方法的集合,也就是说,接口内部只能是没有方法体的抽象方法。
    4. 接口存在的意义就是给另一个类实现的。如果一个类实现了接口,那么就需要继承这个接口中所有的抽象方法。

    为什么要使用接口

    因为Java中只能单继承。虽然c++支持多继承,但是Java设计师为了减少不必要的麻烦,就摒弃了多继承。因为多继承中的多个父类若有同名的方法时,就不知道调用的方法是谁的了。比如动物类里有一个run方法,猫科动物类也有一个run方法,tiger同时继承了猫科动物类和动物类,那么我们就会搞混,分不清super.run是谁的run方法。

    多继承示例代码

    public class Animal {
        public void run(){
            System.out.println("动物奔跑");
        }
    }
    
    public class Cat_Animal {
        public void run(){
            System.out.println("猫科动物奔跑");
        }
    }
    
    public class Tiger extends Animal,Cat_Animal {//直接编译报错,只支持单继承
        @Override
        public void run() {
            super.run();
        }
    }
    

    多实现示例代码

    虽然Java中不支持多继承,但并不代表我们没有这个需求。为了实现需求、且要减少麻烦,于是就有了接口。接口是支持多继承的,但为了与类作区分,所以我们通常说成“多实现(implements)”

    public interface Animal {
        void run();
    }
    
    public interface Cat_Animal {
        void run();
    }
    
    public class Tiger implements Animal,Cat_Animal {//多实现用implements修饰,接口名用逗号隔开
        @Override
        public void run() {
            System.out.println("老虎奔跑");
        }
    }
    
    
    public class Test {
        public static void main(String[] args) {
            Tiger tiger = new Tiger();
            tiger.run();
        }
    }
    
    老虎奔跑
    

    接口的特点

    1. 接口中的方法都是抽象方法。默认都是public abstract,但我们可以不用写,直接写出返回值类型 方法名();即可,因为public abstract会被自动省略。除非实现了接口的类是抽象的,否则接口中的所有方法都要在类中实现。如果实现接口的类是抽象类,则没必要全部实现。
    2. 接口中没有成员变量,都是常量。尽管我们可以在接口中看到int a = 5;String name = "张三";之类的“变量”,但这些都是伪装。因为前面默认的public static final 被省略了。
    3. 接口可以继承多个父接口,如public interface BigCat extends Animal, Cat_Animal{},extends后的接口名用逗号隔开。implements关键字要放在extend后面
    4. 接口中没有构造方法,所以不能被实例化。也正因为不能实例化,所以接口中才没有成员属性和成员变量。因为无法被实例化,我们也就无法通过对象去对接口中的值进行修改。此时,接口中若还支持成员属性和成员变量,那不是很鸡肋嘛。

    类和接口的区别

    1. 接口用interface修饰,类用class修饰
    2. 接口中没有构造函数,类中有构造函数。因此接口不能被实例化,和抽象类相同。
    3. 类中描述的是属性和行为,属性就是颜色、大小、形状等等,行为就是指做的事情。比如猫这个类,包含橘色、抓老鼠这些内容。而接口中只包含行为,行为就是所作所为。比如猫的所作所为就是抓老鼠和钓鱼,那么抓老鼠和钓鱼就是接口中的两个抽象方法。
    4. 类只能继承一个类,但可以实现多个接口。接口不能实现接口,却可以继承多个父接口,如 public interface Demo extends Animal,BigCat,Cat_Animal{}

    接口和抽象类的区别

    - 共同点

    1. 抽象类和接口都是抽象的,都不能被实例化。
    2. 继承抽象类和实现接口,都需要重写方法

    - 不同点

    1. 接口是interface关键字标识,抽象类是abstract class关键字标识。
    2. 接口内部只有常量和抽象方法,抽象类内部可以没有抽象方法。抽象类除了不能被实例化,和普通类没区别。
    3. 抽象类可以实现多个接口,接口可以继承多个父接口。
    4. 接口中的方法必须是public的,变量用final修饰,也就是常量。抽象类中,方法用public、protected、private修饰。
  • 相关阅读:
    35-高级特性之iterable与iterator
    33-高级特性之generator(1)
    34-高级特性之generator(2)
    32-高级特性之类装饰器
    什么是Autolayout
    屏幕适配
    NSTimer
    分页
    UIScrollView的缩放原理
    设置图片圆角
  • 原文地址:https://www.cnblogs.com/anycall/p/10770687.html
Copyright © 2020-2023  润新知