目录
为什么有接口?
- 接口就是一种规则 对行为的抽象 接口侧重于行为
接口的定义和使用
- 接口用于关键字interface来定义
- public interface 接口名{ }
- 接口不能实例化
- 接口和类是实现关系,通过implements关键字表示 public class 类名 implements 接口名 { }
- 接口的子类(实现类)要么重写接口中的所有抽象方法 要么是抽象类
注意
- 接口和类的实现关系,可以单实现,也可以多实现。public class 类名 implements 接口名1,接口名2{ }
- 实现类还可以在继承一个类的同时实现多个接口。public class 类名 extends 父类 implements 接口名1,接口名2{ }
接口的基本使用
package interfacedemo1;
public abstract class Animal {
private String name;
private int age;
public Animal(){
}
public Animal(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public abstract void eat();
}
package interfacedemo1;
public class Dog extends Animal implements Swim{
public Dog() {
}
public Dog(String name, int age) {
super(name, age);
}
@Override
public void eat() {
System.out.println("狗在吃骨头");
}
@Override
public void swim() {
System.out.println("狗在游泳");
}
}
package interfacedemo1;
public class Frog extends Animal implements Swim {
public Frog() {
}
public Frog(String name, int age) {
super(name, age);
}
@Override
public void eat() {
System.out.println("青蛙在吃虫子");
}
@Override
public void swim() {
System.out.println("青蛙在游泳");
}
}
package interfacedemo1;
public interface Swim {
public abstract void swim();
}
package interfacedemo1;
public class Test {
public static void main(String[] args) {
Frog frog = new Frog("小红",12);
frog.eat();
frog.swim();
Rabbit rabbit = new Rabbit();
rabbit.eat();
}
}
接口成员的特点
- 成员变量 只能是常量 默认修饰符:public static final
- 构造方法 没有
- 成员方法 只能是抽象方法 默认修饰符 public abstruct
- JDK7以前:接口只能定义抽
- JDK8:接口中可以定义有方法体中的方法
- JDK9:接口中可以定义私有方法
接口和类之间的关系
- 类和类之间的关系
继承关系,只能单继承,不能多继承,但是可以多层继承
- 类和接口的关系
实现关系,可以单实现,也可以多实现 还可以继承一个类的同时实现多个接口
- 接口和接口的关系
继承关系,可以单继承,可以多继承
package interfacedemo4;
public interface Inter3 extends Inter2,Inter1{
public abstract void method3();
}
package interfacedemo4;
public class InterImpl implements Inter3{
@Override
public void method3() {
}
@Override
public void method1() {
}
@Override
public void method2() {
}
}