目录
一、抽象类
关键字:abstract
1.1抽象类概念
在了解抽象类之前,先来了解一下抽象方法。抽象方法是一种特殊的方法:它只有声明,而没有具体的实现。抽象方法的声明格式为:
abstract void fun();
[public] abstract class ClassName {
abstract void fun();
}
从这里可以看出,抽象类就是为了继承而存在的,如果你定义了一个抽象类,却不去继承它,那么等于白白创建了这个抽象类,因为你不能用它来做任何事情。
抽象方法必须用 abstract 关键字进行修饰。如果一个类含有抽象方法,则称这个类为抽象类,抽象类必须在类前用 abstract 关键字修饰。因为抽象类中含有无具体实现的方法,所以不能用抽象类创建对象。
1.2抽象类特点
- 抽象方法必须为 public 或者 protected(因为如果为 private,则不能被子类继承,子类便无法实现该方法),默认情况下默认为 public。
- 抽象类不能用来创建对象;
- 如果一个类继承于一个抽象类,则子类必须实现父类的抽象方法。如果子类没有实现父类的抽象方法,则必须将子类也定义为为 abstract 类。
- 在其他方面,抽象类和普通的类并没有区别。
二、接口
关键字:interface
2.1接口的概念
比抽象还抽象,或者说是一种特殊的抽象类;接口,英文称作 interface,在软件工程中,接口泛指供别人调用的方法或者函数;接口中可以含有 变量和方法。从这里,我们可以体会到 Java 语言设计者的初衷,它是对行为的抽象。在 Java 中,定一个接口的形式如下:
[public] interface InterfaceName {
}
要让一个类遵循某组特地的接口需要使用 implements 关键字,具体格式如下:
class ClassName implements Interface1,Interface2,[....]{
}
2.2接口的特点
- 不能实例化
- 没有构造方法
- 方法默认public abstract修饰
- 变量默认public static final修饰
2.3接口存在价值
- 定义了规则:一个类可以同时实现多个接口
- 拓展了程序
三、抽象类和接口的区别
3.1语法层面上的区别
- 接口是行为的抽象,是一种行为的规范,接口是like a 的关系;抽象是对类的抽象,是一种模板设计,抽象类是is a 的关系。
- 接口没有构造方法,而抽象类有构造方法,其方法一般给子类使用
- 接口只有定义,不能有方法的实现,java 1.8中可以定义default方法体,而抽象类可以有定义与实现,方法可在抽象类中实现。
- 抽象体现出了继承关系,继承只能单继承。接口提现出来了实现的关系,实现可以多实现。接口强调特定功能的实现,而抽象类强调所属关系。
- 接口成员变量默认为public static final,必须赋初值,不能被修改;其所有的成员方法都是public abstract的。抽象类中成员变量默认default,可在子类中被重新定义,也可被重新赋值;抽象方法被abstract修饰,不能被private、static、synchronized和native等修饰,必须以分号结尾,不带花括号。
我们可以定义通过抽象类和接口来定义这个抽象概念:
abstract class Door {
public abstract void open();
public abstract void close();
}
或者:
interface Door {
public abstract void open();
public abstract void close();
}
注:JDK1.8中对接口增加了新的特性:
- 默认方法(default method):JDK 1.8允许给接口添加非抽象的方法实现,但必须使用default关键字修饰;定义了default的方法可以不被实现子类所实现,但只能被实现子类的对象调用;如果子类实现了多个接口,并且这些接口包含一样的默认方法,则子类必须重写默认方法;
- 静态方法(static method):JDK 1.8中允许使用static关键字修饰一个方法,并提供实现,称为接口静态方法。接口静态方法只能通过接口调用(接口名.静态方法名)。
四、思维导图
多多转发、点赞、评论、谢谢大家,让更多人受益!!!