1.接口的定义
1.1接口的概念
- ①定义接口使用的事interface关键字,不再使用class关键字;
- ②修饰符可以是public或者忽略,忽略的话则访问权限为默认(default);
- ③接口名与类名采取相同的命名规则;
- ④一个接口可以有多个父接口,接口只能继承接口,不能继承类;
- ⑤接口是供类来实现的,所以接口里不能有构造器和初始化块;
- ⑥接口里可以包含成员变量(静态常量,系统自动添加public static
final修饰符)、方法(抽象实例方法、类方法、默认方法、私有方法)、内部类(内部接口、枚举类); - ⑦系统自动会为接口中的普通方法添加abstract修饰符,变为抽象方法;
- ⑧类在实现接口时,应使用implements关键字;
- ⑨类在使用接口后,必须实现接口中的所有抽象方法;
1.2接口的使用示例
路径示意图:
接口output中的代码:
package java_knowledge_01;
// 关键字为interface
public interface Output {
// 在接口的只能定义常量,系统默认添加修饰符public static final
int MAX_LINE = 20;
// 接口中的普通方法默认添加abstract修饰符,变为抽象方法
void out();
// 接口中的普通方法默认添加abstract修饰符,变为抽象方法
void getData(String msg);
// 定义默认方法,使用default修饰
default void print(String... msgs) {
for (String msg : msgs) {
System.out.println(msg);
}
}
// 定义默认方法,使用default修饰
default void test() {
System.out.println("默认的default修饰的test()方法");
}
// 接口中的类方法
static String staticTest() {
return "接口里的类方法";
}
// 接口中的私有方法
private void idea1() {
System.out.println("私有方法");
}
// 接口中的私有静态方法
private static void idea2() {
System.out.println("私有静态方法");
}
}
实现类Idea中的代码:
package java_knowledge_01;
public class Idea implements Output{
// 类需要实现接口中的全部抽象方法
@Override
public void out() {
// TODO Auto-generated method stub
System.out.println("实现抽象方法");
}
@Override
public void getData(String msg) {
// TODO Auto-generated method stub
System.out.println("实现抽象方法");
}
}
类demo中的代码:
package java_knowledge_02;
public class demo {
public static void main(String[] args) {
// 接口中的变量修饰符是public,所以不同的包中也可以使用
System.out.println(java_knowledge_01.Output.MAX_LINE);
// 以下代码不能执行,因为接口中变量的修饰符为final,不可修改
// java_knowledge_01.Output.MAX_LINE = 1;
}
}
2.接口的继承
2.1 java接口的继承
在java中,一个接口可以继承多个接口;字接口继承了父接口后,会获得父接口里定义的所有抽象方法和常量。
2.2 示例代码
代码如下:
interface A{
void testA();
int a = 1;
}
interface B{
void testB();
int b = 2;
}
// 接口的多继承,接口C可以同时继承A、B两个接口
interface C extends A,B {
void testC();
int c = 3;
}
// demo类实现接口C
public class demo implements C {
// 因为接口C继承了接口A、B,所以A、B中的抽象方法也被C继承了
// 因此,使用了接口C的demo类需要实现A、B、C中的所有抽象方法
@Override
public void testA() {
// TODO Auto-generated method stub
System.out.println("实现抽象方法");
}
@Override
public void testB() {
// TODO Auto-generated method stub
System.out.println("实现抽象方法");
}
@Override
public void testC() {
// TODO Auto-generated method stub
System.out.println("实现抽象方法");
}
public static void main(String[] args) {
// 因为接口C继承了接口A、B,所以A、B中的变量可以通过接口C来使用
System.out.println(C.a);
System.out.println(C.b);
System.out.println(C.c);
}
}
3.接口与抽象类
3.1接口与抽象类的共同点
- ①接口和抽象类都不能实例化,只能用于被其他类实现/继承;
- ②接口和抽象类都可以包含抽象方法,实现接口或继承抽象类的子类必须实现其中的所有抽象方法;
3.2接口与抽象类的不同点
- ①接口里不能有普通方法,抽象类中可以有普通方法;
- ②接口里只能定义静态常量,无法定义普通成员常量,抽象类中可以定义普通成员常量;
- ③接口里没有构造器,抽象类中可以有空构造器,用于子类的调用;
- ④接口里不能有初始化块,抽象类中可以有;
- ⑤一个类可以实现多个接口,但一个类只能继承到一个抽象类;