抽象类和接口的区别

(1): 成员区别
    抽象类:
        成员变量:    可以是变量也可以是常量
        构造方法:    有构造方法
        成员方法:    可以是抽象方法(修饰符可以是public ,protected和默认类型),也可以是非抽象方法,所有的抽象方法必须全部重写
        静态方法:    可以有
    接口:
        成员变量:    只能是常量 ,存在默认的修饰符: public static final
        构造方法:    没有构造方法
        成员方法:    只能是抽象方法(修饰符只能是public并且默认是public abstract), 存在默认的修饰符: public abstract,抽象字类需要重写接口中的抽象方法
        静态方法:    不能有(static方法是类方法,它是不允许子类覆写(override)而abstract方法是没有实现的方法,是必须由子类来覆写的。能这么设就矛盾了)
(2): 关系区别:
    
    类与类:        继承关系, 只能是单继承 , 不能是多继承,但是可以是多层继承
    类与接口:         实现关系, 可以是单实现,也可以是多实现,并且一个类可以继承一个类的同时去实现多个接口
    接口与接口:    继承关系  可以是单继承也可以是多继承

    相同点:
        两者都是抽象类,都不能实例化。
        interface实现类及abstrct class的子类都必须要实现已经声明的抽象方法。
(3): 设计理念
    
    抽象类        体现的关系"is a"        抽象类中定义的是该继承体系的共性功能。
    接口        体现的关系"like a"        接口中定义的是该继承体系的扩展功能。
    

(4): 使用场景
        
    接口:需要实现特定的多项功能,而这些功能之间可能完全没有任何联系
    如果你拥有一些方法并且想让它们中的一些有默认实现,那么使用抽象类吧。
如果你想实现多重继承,那么你必须使用接口。
由于Java不支持多继承,子类不能够继承多个类,但可以实现多个接口。因此你就可以使用接口来解决它。
如果基本功能在不断改变,那么就需要使用抽象类。如果不断改变基本功能并且使用接口,那么就需要改变所有实现了该接口的类。

    抽象类表示共有许要实现的方法 接口用来特定类有需要才实现 人都会吃饭 但有的人抽烟
    抽象类是用来捕捉子类的通用特性的

    抽象类是 is a关系;而接口是has a关系

    看看jdk的api会发现大部分接口都是able结尾的,表示一种能力。马士兵曰过:当你不知道用抽象类还是接口好时就用接口
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值