抽象方法和抽象类

定义规则

  • 抽象类和抽象方法必须使用abstract修饰符修饰,抽象方法不能有方法体
  • 抽象类不能被实例化。即使抽象类里不包含抽象方法。
  • 抽象类可以包含成员变量、方法(包括普通方法和抽象方法)、构造器、初始化块、内部类5种成分。抽象类的构造器只用于被子类调用。
  • 含有抽象方法的类只能被定义为抽象类。

抽象类和接口的区别

Abstract class Interface
可以有抽象方法、非抽象方法、静态方法,可以定义 public、protected和private修饰的具体方法 只能有抽象方法,java 8之后可以有默认方法和静态方法,所有方法都只能用public修饰
不支持多继承 支持多继承
可以有final, non-final, static and non-static 变量 所有变量都必须使用public static 和 final修饰
可以实现接口 不可以实现抽象类
可以继承一个类和实现多个接口 只能继承接口

总的来说,抽象类只实现部分抽象化,而接口则实现了完全抽象化。

抽象类和接口的使用场景

使用抽象类的场景:

  1. 联系紧密的几个类之间需要共享代码
  2. 各子类可能拥有许多共同的方法或成员,或者这些方法或成员需要public以外的修饰符(如protected和private)修饰
  3. 需要声明non-static或non-final的成员

使用接口的场景:

  1. 实现接口的类之间没有联系
    例如许多毫无关联的类都实现了Comparable接口 和 Cloneable接口
  2. 需要明确声明与某一种数据类型有关的行为,但不在乎那个类或接口实现这种行为
  3. 需要用到多继承

复习一下java中的变量:

java变量分类图


*欢迎到作者github主页交流

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。