一、内容
jdk1.7之前
公共的静态的常量
公共的抽象方法
interface Person{//接口 Person
void sleep();//public abstract void sleep(); 公共的抽象方法 public abstract 被省略
int age = 15;//public static final int age = 15; 公共的静态的常量 public static final 被省略
}
jdk1.8新增接口可带方法体
默认方法
静态方法
二、使用 implements 实现接口
注意
- 接口可以多实现,但是类只能单继承
- 接口使程序高内聚低耦合。
- 接口不能实例化,因为接口中有抽象方法。
- 在具体的类中使用: 重写接口中的所有抽象方法,按需新增其他内容。
- 在抽象的类中使用: 按需重写接口中的抽象方法,按需新增,但是也要有具体的类才可以使用(与抽象类一致)。
- 一个类需要先继承父类,再实现接口。
- 类和接口之间,只能用类实现接口,接口不能实现类。
- 接口可以多继承接口。
class Person{
void sleep();
int age = 15;
}
interface Eat{
void eat();//public abstract void eat();抽象方法
}
interface Drink{
void drink();//public abstract void drink();抽象方法
}
interface Life extends Eat,Drink{ }//接口可以多继承接口,集成了接口中的方法
//接口可以多实现,一个类需要先继承父类,再实现接口
//或者可写成public class Student extends Person implements Life{}
public class Student extends Person implements Eat,Drink{
@Override//重写父类中的方法
public void sleep() {
System.out.println("每天11点睡觉");
}
@Override
public String eat()//具体的类中使用: 重写接口中的所有抽象方法
System.out.println("每天吃营养餐");
}
@Override
public void drink(){
System.out.println("正在喝水");
}
void study(){//按需新增
System.out.println("每天学习到深夜");
}
}
public class Test {
public static void main(String[] args) {
Eat e =new Student();//向上转型
e.eat();//每天吃营养餐 只可以输出Eat接口中的方法,其他会报错
Student s = (Student)e;//向下转型
s.sleep();//每天11点睡觉
s.eat();//每天吃营养餐
s.drink();//正在喝水
s.study();//每天学习到深夜
}
}
三、默认方法
默认方法:被default修饰的方法,且default不可省略,并通过实现类使用。
注意
- 默认方法被重写时,要去掉default。
- 默认方法通过实现类使用。
interface Person{
public default void eat(){
System.out.println("每天吃正常吃三餐");
}
}
class Student implements Person{
@Override
public void eat(){ //默认方法被重写时,要去掉default
System.out.println("每天吃营养餐");
}
}
public class Text {
public static void main(String[] args) {
Person p = new Student();//默认方法通过实现类使用。
p.eat();//每天吃营养餐
}
}
四、静态方法
静态方法:被static修饰的方法,只能通过接口名调用。
interface Person{
public static void eat(){
System.out.println("每天吃正常吃三餐");
}
}
public class Text {
public static void main(String[] args) {
Person.eat();//每天吃正常吃三餐 静态方法只能通过接口名调用:接口名.方法名([参数列表]);
}
}