接口的基本概念
接口就是一种比抽象还抽象的类,体现在所有方法都为抽象方法
定义类的关键字是class,而定义接口的关键字是interface
public interface InterfaceTest {
/*public static final */int cnt=1;//里面只能有常量
// private void show(){};//从java9开始允许接口中出现私有方法
// public void show(){}//里面只能有抽象方法(新特性除外)
/*public abstract */ void show();//
}
如:金属接口 货币接口 黄金类
弥补java中继承不能多继承的问题.
public interface Metal {
public abstract void shine();
}
public interface Money {
public abstract void buy();
}
public class Gold implements Metal,Money {
@Override
public void shine() {
System.out.println("发粗了黄金色光芒");
}
@Override
public void buy() {
System.out.println("买了好多好吃的");
}
public static void main(String[] args) {
//1.声明接口类型的引用指向实现类的对象,形成多态
Metal m1=new Gold();
m1.shine();
Money mn=new Gold();
mn.buy();
}
}
类和接口之间的关系
public interface Runner {
//自定义抽象方法描述奔跑的行为
public abstract void run();
}
public interface Hunter extends Runner{
//自定义成员方法描述捕猎的行为
public abstract void hunt();
}
package com.lagou.task09;
/**
* @author lijing
* @date 2020/9/21 15:38
* @description
*/
public class Man implements Hunter{
@Override
public void hunt() {
System.out.println("正在追赶一只小白兔");
}
@Override
public void run() {
System.out.println("正在被胖虎追赶,玩命奔跑");
}
public static void main(String[] args) {
//1.声明接口类型的引用指向实现类的对象 形成了多态
Runner runner=new Man();
runner.run();
Hunter hunter=new Man();
hunter.hunt();
}
}
接口和抽象类的主要区别
- 定义抽象类的关键字是abstract class ,定义接口的关键字是interface
- 继承抽象类的关键字是extends,实现接口的关键字是implements
- 继承抽象类是单继承,而实现接口支持多实现.
- 抽象类中可以有构造方法,而接口中不可以有构造方法
- 抽象中可以有成员变量,而接口中只可以有常量
- 抽象类中可以有成员方法,而接口中只可以有抽象方法
- 抽象类中增加方法时子类可以不用重写,而接口中增加方法时实现类需要重写(Java8以前的版本)
- 从Java8开始增加新特性,接口中允许出现非抽象方法和静态方法,但非抽象方法需要使用default关键字修饰
- Java9开始增加新特性,接口中允许出现私有方法