接口(interface、implement)
接口:interface
接口的类中
所有的属性默认为:public static final
所有的方法默认为:public abstract
在jdk1.8之前只能定义静态的常量和公共的抽象方法,在jdk1.8之后就可以定义静态方法和默认方法
(常量一般都建议使用大写字母)
意义
接口存在的意义:Java中一个类只能有一个父类,所以用接口可以实现多继承的逻辑
从本质上来讲,接口是一种特殊的抽象类,这种“抽象类”中只包含了常量和方法的定义,而没有变量和方法的实现
定义
接口的定义:使用interface关键字来声明一个接口。
【访问权限修饰符】 interface 接口名称 【extends 其他接口名1,… 其他接口名n】{
// 声明常量
// 抽象方法
// 静态方法
// 默认方法
}
接口的使用:
类使用implements关键字来实现接口。在类的声明中,implements关键字是跟在class声明之后的
【访问权限修饰符】 class 类名 implements 接口名1,… , 接口名n { }
public class MyInterfaceImpl implements MyInterface1,MyIntereFace2 {}
接口与继承的结合
【访问权限修饰符】class 类名 extends 父类名 implements 接口名1,… , 接口名n { }
public class MyInterfaceImpl extends fulei implements MyInterface1,MyIntereFace2 {}
特性
● 接口是隐式抽象的,当声明一个接口的时候,不必使用abstract关键字。
● 接口中方法可以是抽象的,静态的,默认的。
● 接口中声明的属性默认为 public static final 的。
● 接口不是被类继承的,是被类用来实现的。
● 接口不能实例化(就是没有构造方法,也是和抽象类的区别),但是可以声明对象的引用(多态性)。
● 多个类是可以实现一个共同的接口。
● 一个类是可以实现多个接口的,但是只能继承一个类。
● 与继承关系类似,接口与实现类之间存在多态性。
● 一个接口是可以继承其他多个接口的。
● 当一个类实现接口时,类是要求实现接口中的所有方法(包括要实现的接口所继承的所有接口),否则,类就必须声明为抽象的类。
一个类可以实现多个接口,但是一个类只能继承一个类
小知识:一个类如果是一个接口的实现类,那么我们习惯命名是在接口名后面加上impl
package com.functorone;
public class Demo {
public static void main(String[] args) {
//是可以被调用到的
System.out.println(MyInterface.NUM); //常量一般都建议使用大写字母
MyInterface.test1(); //直接调用到静态方法
MyInterfaceImpl myInterface = new MyInterfaceImpl();
myInterface.eat();
}
}
package com.functorone;
public interface MyInterface {
//默认之下它的完整语句是 public static final int a = 10;
int NUM = 10;
//默认之下它的完整语句是 public abstract void eat();
void eat(); //定义方法(定义功能)
//默认方法只能通过子类来调用,子类可以重写也可以不重写
default void test() { //完整语句是: public default void test()
System.out.println("默认方法");
}
//静态方法是可以直接通过接口名调用到
static void test1() {
System.out.println("静态方法");
}
}
package com.functorone;
/*
* 要么将这个类声明为抽象类
* 要么实现接口里面所有的抽象类
* */
public class MyInterfaceImpl implements MyInterface {
@Override
public void eat() {
System.out.println("MyInterface里面的eat抽象方法的实现");
}
}