接口
微观概念:接口是一种能力和约定。
接口是一种标准。注意关注行为标准(即方法)。
面向对象的开发原则中有一条:面向接口编程。
接口的声明格式
//使用关键字interface关键字定义接口
【修饰符】 interface 接口名{//没有构造方法,不能穿件对象
接口的成员列表;
//只能定义:公开静态常量,公开抽象方法不能有方法体
}
interface Myinterface{
int num= 20;
//存在默认修饰符:public satic final...(可以省略不写!)
public static final String FIELD="value";
public abstract void method();
}
类实现接口的格式
【修饰符】 class 实现类 implements 父接口们{
}
【修饰符】 class 实现类 extends 父类 implements 父接口们{
}
//定义一个接口,接口中有一个跳高的功能
interface Jump{
/*
public void jump() {//Abstract methods do not specify a body:抽象方法不能存在方法体
System.out.println("可以跳高了...") ;
}
*/
public abstract void jump() ;
}
//定义猫类
//子实现类
class Cat implements Jump{ //implements:实现接口中的抽象方法
public void eat() {
System.out.println("猫吃鱼...");
}
//子实现类必须将接口的抽象方法必须重写
@Override
public void jump() {
System.out.println("猫可以跳高了...");
}
}
//测试类
public class InterfaceDemo {
public static void main(String[] args) {
//创建接口对象
//Jump jump = new Jump() ; //Cannot instantiate the type Jump :接口不能直接实例化
//接口名 对象名 =new 子实现类名() ; //接口多态
Jump jump = new Cat() ;
jump.jump();
}
}
接口继承接口的格式
【修饰符】 interface 接口名 extends 父接口们{
接口的成员列表;
}
接口的特点:
(1)接口不能直接实例化,即不能直接new对象
(2)只能创建接的实现类对象,那么接口与它的实现类对象之间可以构成多态引用。
(3)实现类在实现接口时,必须重写所有抽象的方法,否则这个实现类也得是抽象类。
(4)Java规定类与类之间,只能是单继承,但是Java的类与接口之间是多实现的关系,即一个类可以同时实现多个接口
(5)Java还支持接口与接口之间的多继承。
接口的成员特点:
JDK1.8之前:
(1)全局的静态的常量:public static final,这些修饰符可以省略
(2)公共的抽象方法:public abstract,这些修饰符也可以省略
JDK1.8之后:
(3)公共的静态的方法:public static ,这个就不能省略了
(4)公共的默认的方法:public default,这个就不能省略了
- 成员变量:
- 只能常量,被静态修饰存在默认修饰符:public satic final…(可以省略不写!)
- 成员方法:
- 接口中的方法只能是抽象方法,存在默认修饰符:public abstract(可以省略不写!)
- 构造方法:
- 接口没有构造方法!
接口和类的关系
- 类与类的关系
- 继承关系,只能单继承,但是可以多层继承
- 类与接口的关系
- 实现关系,可以单实现,也可以多实现,还可以在继承一个类的同时实现多个接口
- 接口与接口的关系
- 继承关系,可以单继承,也可以多继承
抽象类和接口的区别
1)成员的区别
抽象类:
成员变量:既可以定义常量,也可以变量
成员方法:既可以是抽象方法,也可以是非抽象方法
构造方法:存在,存在无参构造/有参构造,对数据进行初始化!
接口:
成员变量---->此时是一个常量:存在默认修饰符
public static final...
成员方法:只能是抽象方法
构造方法:不存在构造方法
2)关系的区别:
类与类之间: extends,单继承,不支持多继承,但是可以多层继承!
类与接口:实现关系:implements:
一个类继承另一个类的同时,可以实现多个接口!
接口与接口:
继承关系:extends
可以单继承,也可以多继承!
3)设计理念的区别
抽象类:
由继承来保证代码的复用性,由多态来保证代码的扩展性
接口:
是一种额外的功能,体现的是一种"like a"的关系