浅谈抽象类和接口
在面试中相信大家经常被问到接口和抽象类的区别,使用场景在这里希望能给大家留下深刻印象
1、接口中都是抽象方法(java8之后接口可以有方法的具体实现,方法类型为缺醒default),而抽象类之中既可以有实例方法也可以有抽象方法。
2、接口中的变量都是public static final(无论修饰不修饰),而抽象类之中任何修饰符都行。
3、一个类可以实现多个接口,但是只能继承一个抽象类,但是记住继承抽象类的时候如果当前类不是抽象类那就得实现父类中所有的抽象接口。
4、(面试官比较喜欢问的)抽象类可以实现接口,但是接口不能继承抽象类(编译不通过),理由请看1
普通类实现接口的话必须全部实现接口里所有的方法,但是抽象类就没有这个限制,你可以实现抽象类之中的部分方法,当其他类继承这个抽象类的时候,仍然可以实现接口中有但是抽象类并未实现的方法。
eg:
|
public abstract class QueryDaoImpl implements QueryDao{
public String say(String username) {
return "hello "+username;
}
}
public class QueryChild extends QueryDaoImpl {
public void add(Integer a, Integer b) {
System.out.println("结果是:"+(a+b));
}
}
public class Test extends QueryChild{
public void t(){
this.add(12,56);
}
public String str(String username){
return this.say(username);
}
public static void main(String[] args) {
new Test().t();
System.out.println(new Test().str("good"));
}
}
一般情况下,抽象类用在我们写代码时候的基层,也就是BaseDao、BaseController、….因为可以减少代码冗余