Java中的接口
接口的基础语法
- 接口:
 1、接口也是一种"引用数据类型",编译后也是一个字节码文件;
 2、接口是完全抽象的(抽象类是半抽象);或者也可以说接口是特殊的抽象类。
- 接口的定义和语法
 1、语法:
 [修饰符列表] interface 接口名{}
 2、接口支持多继承,一个接口可以继承多个接口。
interface C extends A, B {
}
- 接口中只包含两部分内容(只有这两部分):
 一部分是:常量。
 一部分是:抽象方法。
- 在接口中
 1、所有的元素都是public修饰的(都是公开的);
 2、抽象方法定义时:public abstract修饰符可以省略;
//public abstract int sum(int a, int b);
int sum(int a, int b);
//public abstract修饰符可以省略
3、方法都是抽象方法,所以接口中的方法不能有方法体。
4、接口中的常量
接口中随便写一个变量就是常量
//常量
//public static final double PI = 3.1415926;
double PI = 3.1415926;/*public static final可以省略,
但不代表不存在,所以这里的PI还是一个常量*/
类实现接口
- 接口的基础语法:
 1、类和类之间叫做继承,类和接口之间叫做实现。
 2、仍然可以将"实现"看做"继承"。
 继承使用extends关键字完成;
 实现使用implements关键字完成。
 3、当一个非抽象的类实现接口的话,必须将接口中所有的对象方法全部实现(覆盖、重写)。
 4、实现时必须加上public(权限只能更高,不能更低)。
package com.zyh.jieKou;
public interface MyMath{
    int sum(int a, int b);
    int sub(int a, int b);
    }
package com.zyh.jieKou;
class MyMathImpl implements MyMath{
    public int sum (int a, int b){
        return a + b;
    }
    public int sub (int a, int b){
        return a - b;
    }
}
- 一个类可以同时实现多个接口
 弥补了java中类和类只支持单继承的缺陷。
- 关于接口之间的强转
 1、接口和接口之间在进行强制类型转换的时候,没有继承关系,也可以强转。(调用其它接口中的方法,需要转型->接口转型)
 2、但是一定要注意,运行时可能会出现classCastException异常。例如:
 接口A和接口B虽然没有继承关系,但是写代码的时候可以互转。编译器没意见,但是运行时可能出现: ClassCastException
- 继承和实现都存在时
 extends关键字在前;implements关键字在后。
接口在开发中的作用
- 类似于多态在开发中的作用(多态:面向抽象编程,不要面向具体编程。降低程序的耦合度,提高程序的扩展力。)
- 接口可以解耦合
 任何一个接口都有调用者和实现者;
 接口可以将调用者和实现者解耦合;
 调用者面向接口调用;
 实现者面向接口编写实现。
类和类之间的关系
- is a、has a、like a
 1、is a:
 Cat is a Animal (猫是一个动物)凡是能够满足is a的表示"继承关系”。
 A extends B
 2、has a
 He has a Pen (他有一支笔)凡是能够满足has a关系的表示"关联关系",关联关系通常以"属性"的形式存在。
 A{
 B b;
 }
 3、like a
 Cooker like a FoodMenu (厨师像一个菜单一样)凡是能够满足like a关系的表示"实现关系",实现关系通常是:类实现接口。
 A implements B
抽象类和接口有什么区别?
- 只说语法上的区别,至于以后抽象类和接口应该怎么进行选择,通过后面的项目去体会/学习。
- 1、抽象类是半抽象的;
 接口是完全抽象的。
 2、抽象类中有构造方法;
 接口中没有构造方法。
 3、接口和接口之间支持多继承;
 类和类之间只能单继承。
 4、一个类可以同时实现多个接口;
 一个抽象类只能继承一个类(单继承)。
 5、接口中只允许出现常量和抽象方法,但在 JDK8 中,接口也可以定义静态方法,可以直接用接口名调用。实现类和实现是不可以调用的。如果同时实现两个接口,接口中定义了一样的默认方法,则必须重写,不然会报错。
 6、接口的方法默认是 public,所有方法在接口中不能有实现(Java 8 开始接口方法可以有默认实现),而抽象类可以有非抽象的方法。
 7、接口中除了 static、final 变量,不能有其他变量,而抽象类中则不一定。
 8、一个类可以实现多个接口,但只能实现一个抽象类。接口自己本身可以通过 extends 关键字继承多个接口。
 9、接口方法默认修饰符是 public,抽象方法可以有 public、protected 和 default 这些修饰符(抽象方法就是为了被重写所以不能使用 private 关键字修饰!)。
 10、从设计层面来说,抽象是对类的抽象,是一种模板设计,而接口是对行为的抽象,是一种行为的规范。
 注:以后接口使用的比抽象类多,一般抽象类使用的还是少。接口一般都是对“行为"的抽象。
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号