接口
Java中,使用interface关键字来定义接口
接口中的方法都只有声明,没有方法主体
接口中所有的方法都是抽象方法 具体的实现都要在子类里完成
接口可以继承其他的接口,并且可以继承多个
从接口的实现者角度看,接口定义了可以向外部提供的服务
从接口的调用者角度看,接口定义了实现者能提供那些服务
接口不能创建实例,但是可以用来声明引用变量的类型
定义接口
public interface TestInterface { //访问修饰符只能是public或者是默认的
//接口中不存在私有
void age(); //方法只能是public abstract 可以写也可以不写
int AGE = 18; //接口中属性只能是常量 用public static final修饰 可写可不写
}
接口的实现
实现单个接口
public interface TestInterface { //访问修饰符只能是public或者是默认的
//接口中不存在私有
void age(); //方法只能是public abstract 可以写也可以不写
int AGE = 18; //接口中属性只能是常量 用public static final修饰 可写可不写
}
class TestClass implements TestInterface{ //使用implements关键字实现接口的连接
@Override
public void age() { //实现接口类中定义的抽象类 重写了父类中的抽象类
System.out.println(AGE);//可以使用接口里面的常量
}
}
实现多个父接口
public class TestInerfaces {
public static void main(String[] args) {
Name name = new Student1(); //不能new接口 接口是抽象的 Name接口里
Age age = new Student1();//可以用两个接口new一个对象
name.say();
age.can();
}
}
interface Name{
void say();
}
interface Age{
int AGE = 18;
void can();
}
class Student1 implements Name,Age{ //实现类可以实现多个父接口
@Override
public void can() {
System.out.println("18可以学驾照了");
}
@Override
public void say() {
System.out.println("学生说他的名字是。。。");
}
public void play(){ //可以写自己的方法
System.out.println("玩电脑");
}
}
class teacher implements Name,Age{
@Override
public void can() {
System.out.println("老师可以教学生");
}
@Override
public void say() {
System.out.println("老师的名字是。。。");
}
}
接口可以多继承
Java中类没有多继承只有单继承,但是Java中接口存在多继承
public class TestInterface1 {
}
interface A{
void a();
}
interface B{
void b();
}
interface C extends A,B{ //接口可以实现多继承,这里的接口C继承了接口A和B
void c();
}
class D implements C{ //D类实现了C接口 (其中就包括a,b,c抽象方法)
@Override
public void a(){
System.out.println("a");
}
@Override
public void b() {
System.out.println("b");
}
@Override
public void c() {
System.out.println("c");
}
}
抽象类和接口之间的共同点和区别
区别
抽象类中既可以有抽象方法,也可以有具体方法;接口中只能有抽象方法(Java8之前)
抽象类中的构造方法可有可无;接口中不能定义构造方法
抽象类中可以定义成员变量;接口中只能有公有的、静态的常量
继承抽象类需要满足单一继承原则;实现接口可以同时实现多个
.
共同点
都可以包含抽象方法;都不能用于实例化(创建对象)