抽象类与接口到底有啥区别呢,你选择使用的依据是什么?懵!但是面试的时候有可能会遇到。下面是自己的粗浅的理解与解释。
抽象类是啥?透过现象看本质,是对事物根源的抽象概括;那么接口呢?是对一种行为一个动作的抽象描述。
抽象类说你是什么,你就一定是什么,而接口说你你到底能做什么!
比如说吧,杨树、松树,它们本质上都是树,那么“树”就是它们的抽象类,说明它们都是树。
抽象类:Tree
public abstract class Tree {
}
实现类:
杨树Poplars
public class Poplars extends Tree{
}
松树:Pine
public class Pine extends Tree{
}
再比如说,猪可以吃东西,牛也可以吃东西,想想,“吃东西”是否可以抽象成一个类吗?看本质,猪和牛是“吃东西”吗,显然不是,它们是动物,所以 你就可以把“吃东西”定义成一个接口。
接口类:Eat
public interface Eat {
void eatFood();
}
接口实现类:
猪:Pig
public class Pig implements Eat{
@Override
public void eatFood() {
}
}
牛:Bull
public class Bull implements Eat{
@Override
public void eatFood() {
}
}
再来说,松树、杨树可以是动物吗?不能,所以说,一个类有且只能继承一个抽象类;那么,猪可以走路吗?牛可以走路吗?可以的,说明一个类可以实现多个接口。
暂且总结如下:
(1)一个类只能继承一个抽象类,但可以实现多个接口
(2)抽象类可以声明一个方法的存在而不去实现它,而接口的方法全部是抽象的
(3)抽象类可以实现部分方法,而接口不可以实现
(4)接口的成员变量都是static的,而抽象类没必要
(5)当你关注事物的本质的时候就用抽象类,当你关注一个事物的行为的时候就用接口