接口和抽象类


最近重新温故Java基础知识,理解设计模式,但是代码量不够可能很多理解的不够到位,先记一下,以后再来更新。接口和抽象类使用起来很简单,但是如果要明确何时何地何种条件下使用接口和抽象类,可能还得需要更多的思考和代码阅读量。

接口和抽象类的定义

  • 接口
    interface关键字产生了一个完全抽象的类,一个接口表示“所有实现了该接口的类看起来都像这样”,接口被用来创建类与类之间的协议。
    接口的特点:
    1:接口中可以存在成员变量,但是只能是 public static final 类型的,且必须给初值。
    2:接口中的方法默认是public修饰的。Java8之后允许接口中有default方法和静态方法。(默认方法主要是提供了一种在不破坏现有代码基础上扩展接口的方式。实现接口的类也会自动拥有默认方法但是不拥有静态方法。)
  • 抽象类
    定义:包含抽象方法的类。抽象方法是一种只有声明没有具体实现的方法。
    抽象类的特点
    1:抽象方法必须是public或者protected修饰的,缺省时为public。(抽象方法是用来继承的,private就没意义了)
    2:继承抽象类的子类必须实现所有的抽象方法,否则就只能定义为抽象类。

接口和抽象类的区别

抽象类更像是普通类和接口间的中庸之道,在构建具有某些未实现方法的类时,可能你的第一想法是创建接口,但不可能总是使用纯接口,所以抽象类仍然是用于此目的一种重要工具。
接口能更完全的解耦。如果一个方法操作的是类而非接口,那么你就只能使用这个类及其子类。接口可以在很大程度上放宽这种限制。

  • 语法层面
    1:抽象类可以提供成员方法的实现细节,而接口中只能存在public abstract 方法。
    2:抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是public static final类型的。
    3:一个类只能继承一个抽象类,而一个类却可以实现多个接口。
    4:接口没有构造方法,抽象类可以有。【1)因为类是单继承的,而接口可实现多个,如果每个接口都有构造方法的话在调用父类构造方法时就没办法指定了。2)接口主要关注的是接口里面的方法,方法只需要声明而不需要初始化。】
  • 设计层面
    1:抽象类是对整个对象的抽象,而接口是对行为(对象的一部分)的抽象。抽象类更多是为了代码重用,通过继承来扩展。接口更纯粹,只是一种行为约束,你实现了我的接口就要实现我接口中的方法。
    2:抽象类作为父类,通过继承实现一种模板设计。而接口是一种行为规范,是实现了该接口的都能有这种功能。

选择使用抽象类和接口的依据

任何抽象性都应由正真的需求产生。恰当的原则应该是优先选择类而不是接口。从类开始,如果接口的必要性变得非常明确,就进行重构拆分出接口。 对于创建类,任何时候都可以替换为创建一个接口和一个工厂。-------《Java 编程思想》

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值