interface(接口)
一、Java接口是什么
Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。
接口,在Java编程语言中是一个抽象类型,它被用来要求类(Class)必须实现指定的方法,使不同类的对象可以利用相同的界面进行沟通。接口通常以interface来宣告,它仅能包含方法签名以及常数宣告(变量宣告包含了 static 及 final),一个接口不会包含方法的实现(仅有定义)。
接口无法被实例化,但是可以被实现。一个实现接口的类,必须实现接口内所描述的所有方法,否则就必须宣告为抽象类。另外,在Java中,接口类型可用来宣告一个变量,他们可以成为一个空指针,或是被绑定在一个以此接口实现的对象。
其中一个使用接口的优势是,可以利用他们模拟多重继承,类在JAVA中不允许多重继承,所有在Java中的类必须而且仅能有一个父类,而java.lang.Object是唯一一个例外。
Java的类可以被实现许多个接口,然而一个接口则无法实现其他的接口。
二、接口的定义
用 interface 来定义。
接口中的所有成员变量都默认是由public static final修饰的。
接口中的所有方法都默认是由public abstract修饰的。
接口没有构造方法,构造方法用于创建对象
实现接口的类中必须提供接口中所有方法的具体实现内容。
多个无关的类可以实现同一个接口
一个类可以实现多个无关的接口
与继承关系类似,接口与实现类之间存在多态性
接口也可以继承另一个接口,使用extends关键字。
实现接口的类中必须提供接口中所有方法的具体实现内容。
多个无关的类可以实现同一个接口
一个类可以实现多个无关的接口
与继承关系类似,接口与实现类之间存在多态性
一个类即存在继承关系又存在实现关系,继承在前,实现在后。
Java中的类是单继承的,Java中的接口是多继承的。
接口格式:interface 接口名{}
实现类格式:class 实现类名 implements 接口名{}
作用:用于定义方法,所以只包含抽象方法。
特点:不可实例化,只有抽象方法、常量。
接口(interface)可以说成是抽象类的一种特例,接口中的所有方法都必须是抽象的。接口中的方法定义默认为public abstract类型,接口中的成员变量类型默认为public static final。
三、抽象类与接口的区别
1.抽象类可以有构造方法,接口中不能有构造方法。
2.抽象类中可以有普通成员变量,接口中没有普通成员变量
3.抽象类中可以包含非抽象的普通方法,接口中的可以有非抽象方法,比如default
方法
4.抽象类中的抽象方法的访问类型可以是public
,protected
,但接口中的抽象方法只能是public
类型的,并且默认即为public abstract
类型。
5.抽象类中可以包含静态方法,接口中不能包含静态方法
6.抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,但接口中定义的变量只能是public static final
类型,并且默认即为public static final
类型。
7.一个类可以实现多个接口,但只能继承一个抽象类。
示例:
package com.myJava.monster;
//实现了接口的继承,和多继承的例子
public class TestInterface {
public static void main(String[] args){
monster monster1 = new monster();
monster1.live();
monster1.work();
monster1.run();
}
}
interface Person {
public static final int age =10;
public abstract void live();
}
interface Man extends Person {
public static final int length=180;
public abstract void work();
}
interface Women extends Person {
public static final int weight = 55;
public abstract void run();
}
class monster implements Man,Women {
public String name;
@Override
public void live() {
System.out.println("吃喝拉撒");
}
@Override
public void work() {
System.out.println("干干干");
}
@Override
public void run() {
System.out.println("跑步减肥");
}
}