这个很多人都可以说出狠多区别,这里我们先回顾一下
接口
interface关键字修饰,实现使用implements,可以实现多个;方法都是公开抽象的;不能创建对象;实现一个接口的类要么全部实现抽象方法,要么是一个抽象类;
抽象类
abstract关键字修饰,继承使用extends,只能继承一个;方法可以是抽象的或者不是抽象的;不能创建对象;
接口与抽象类
接口是方法的集合,使用接口可以定义规则(方法),对外提供统一明确的服务;抽象类为了代码复用,相同的代码抽象成抽象类,子类可以重写成单独的方法,也可以使用父类的方法;举个例子,工人都有吃饭,工作两个方法,工人接口可以定义
void eat();
Object work();
然后所有工人的吃饭都一样,就可以定义抽象类工人
void eat(){
System.out.println("吃肉")
}
public abstract Object work();
不同的工人继承抽象工人类,只需要实现work方法,都统一有了eat方法
public Object work(){
return new Object();
}
接口的一个使用案例
业务场景:根据用户vip等级,提供不同的服务;比如爱奇艺会员
先上原始代码:
public class Test{
public String service(User user ){
if(user instanceOf Vip1){
//vip1的服务
}else if(user instanceOf Vip2){
//vip2的服务
}
}
}
这样可以吗?功能实现了,只是当vip3出现时,调整很多,判断很多,很复杂;接下来借用接口梳理过程,
public interface Vip{
void doSomething();
}
public class Vip1 implements Vip{
void doSomething(){
//vip1的服务
}
}
public class Vip2 implements Vip{
void doSomething(){
//vip2的服务
}
}
public class Test{
private Map<User.TYPE,Vip> map;
public String service(User user ){
map.get(user.TYPE).doSomething();
}
}
当出现Vip3时,只要添加一个Vip3去实现Vip接口,就好了。。。
接口与抽象类就到这里,期望你的点赞。