抽象类与接口对比及使用

1 篇文章 0 订阅
1 篇文章 0 订阅

抽象类

抽象类是用来捕捉子类的通用特性的 。它不能被实例化,只能被用作子类的超类

接口

接口是抽象方法的集合。如果一个类实现了某个接口,那么它就继承了这个接口的抽象方法

 抽象类接口
定义abstract class Xxxinterface Xx
使用extendsimplements
构造器可以有构造器不能
 除不能实例化外其他与普通java class类相同完全不同
修饰符修饰符都可只能是public 默认是public
实现可选择重写接口中方法器实现类必须存在
常量定义常量 public static final默认就是,直接类型名 变量名即可

什么时候使用抽象类和接口

  • 如果你拥有一些方法并且想让它们中的一些有默认实现,那么使用抽象类吧。
  • 如果你想实现多重继承,那么你必须使用接口
  • 如果基本功能在不断改变,那么就需要使用抽象类。如果不断改变基本功能并且使用接口,那么就需要改变所有实现了该接口的类。

要把对象的行为和对象的实现分离开来

行为模型应该总是通过接口而不是抽象类定义

在使用接口的同时仍旧可以使用抽象类,不过这时抽象类的作用是实现行为,而不是定义行为。只要实现行为的类遵从接口定义,即使它改变了父抽象类,也不用改变其它代码与之交互的方式。特别是对于公用的实现代码,抽象类有它的优点。抽象类能够保证实现的层次关系,避免代码重复。然而,即使在使用抽象类的场合,也不要忽视通过接口定义行为模型的原则。从实践的角度来看,如果依赖于抽象类来定义行为,往往导致过于复杂的继承关系,而通过接口定义行为能够更有效地分离行为与实现,为代码的维护和修改带来方便。

1. 接口中的方法可以有参数列表和返回类型,但不能有任何方法体。

2. 接口中可以包含字段,但是会被隐式的声明为static和final。

3. 接口中的字段只是被存储在该接口的静态存储区域内,而不属于该接口。

4. 如果没有实现接口中所有方法,那么创建的仍然是一个接口。

5. 扩展一个接口来生成新的接口应使用关键字extends,实现一个接口使用implements。

 

附:

常量定义举例:

class:

public final class Constants {
    private Constants() {}
    public static final int A = 100;
    public static final int B = 100;
    public static final int C = 100;
    public static final int D = 100;
}

类定义常量,需要定义成final且定义一个private的构造方法,这样做是为了不让其他类继承,禁止实例化此类,调用时直接以"类.常量"的方式调用

不能实例化也不能被继承,看起来完美无缺。

---------------------------------

interface:

public interface Constants {
    int A = 100;
    int B = 100;
    int C = 100;
    int D = 100;
}

接口定义常量,虽不能实例化,却可以被其他类实现。

interface生成的class文件比class生成的class文件会更小,而且更简洁,效率更高。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值