抽象类和接口的区别

类是对象的模板,抽象类和接口可以看做是具体的类的模板

相同点:

  • 接口是一种特殊的抽象类
  • 都代表类树形结构的抽象层
  • 都不能被实例化
  • 都能包含抽象方法(抽象方法用来描述系统提供哪些功能,而不必关心具体的实现)

不同点

  • 抽象类里面既可以有抽象方法也可以有非抽象方法,而接口里面只能包含抽象方法
public abstract class A{
    public abstract void method1();
    public void method2(){
        //A method2
    }
}
public class B extends A{
    public void method1(){
        //B method1
    }
}
public class C extends A{
    public void method1(){
        //C method1
    }
}
public interface A{
    public void method1();
    public void method2();
}
public class B implements A{
    public void method1(){
        //B method1
    }
    public void method2(){
        //B method2
    }
}
public class C implements A{
    public void method1(){
        //C method1
    }
    public void method2(){
        //C method2
    }
}
  • 一个类只能继承一个直接的父类(可能是抽象类),但一个类可以实现多个接口,这个就是接口的优势
interface A{
    public void method2();
}
interface B{
    public void method1();
}
class C implements A,B{
    public void method1(){
        //C method1
    }
    public void method2(){
        //C method2
    }
}
//可以如此灵活的使用C,并且C还有机会进行扩展,实现其他接口
A a=new C();
B b=new C();
abstract class A{
    public abstract void method1();
}
abstract class B extends A{
    public abstract void method2();
}
class C extends B{
    public void method1(){
        //C method1
    }
    public void method2() {
        //C method2
    }
}

综上所述,接口和抽象类各有优缺点,在接口和抽象类的选择上,必须遵守这样一个原则:

  • 行为模型应该总是通过接口而不是抽象类定义,所以通常是优先选用接口,尽量少用抽象类.
  • 选择抽象类的时候通常是如下情况:需要定义子类的行为,又要为子类提供通用的功能.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值