对于初学者来说,决定选择哪一个接口可能会让他们觉得难以抉择,因为接口本质上是一个完全抽象的类。
照片由 Oliver Roos 拍摄,感谢 Unsplash
抽象类(Abstract Class)- 抽象类不能单独实例化,并且可以包含没有实现的方法(抽象方法)以及有实现的方法。
- 抽象类同样可以拥有构造函数和成员变量。
用法如下:
- 当你希望提供一个子类可以扩展或覆盖的默认行为时,可以使用抽象类(abstract class)。
- 当一组相关的类具有共有的特性和行为时,也可以使用抽象类。
- 在Java中,接口是一个定义一组方法签名的模板,仅包含方法签名而不包含方法体和静态final变量。
- 接口不能有构造器,也不能有实例变量(静态final变量除外)。
应用场景:
- 在你想让类实现一组特定的方法时,使用接口。
- 当不同且不相关的类需要实现共通功能而不必强制加入层级结构时。
- 抽象类(abstract class) 当你想要为某些方法提供默认实现时很有用,并让子类来实现其他方法。它们还可以包含状态,比如成员变量。
- 接口(interface) 当你希望指定一组类需要遵循的契约时很有用,特别是当这些类不一定通过继承关系相关时。
以下是一些场景示例:
- 抽象类的例子: 比如说你有不同类型的车辆(汽车、卡车等),它们有一些共同的行为,但也有各自独特的行为:
abstract class Vehicle {
// 普通方法
public void start() {
System.out.println("车辆启动了...");
}
// 抽象方法
public abstract void stop();
}
class Car extends Vehicle {
// 方法实现
public void stop() {
System.out.println("汽车停了...");
}
}
class Truck extends Vehicle {
// 方法实现
public void stop() {
System.out.println("卡车停了...");
}
}
接口示例:例如: 假设你有不同的员工(比如经理、工程师),他们承担不同的职责,但都需要实现一个通用的功能。
接口 Worker {
void 工作();
}
类 Manager 实现 Worker {
public void 工作() {
输出("经理在干活...");
}
}
类 Engineer 实现 Worker {
public void 做事() {
输出("工程师在搞技术...");
}
}
来自Java标准库的一些示例
请注意,原文中的破折号在中文翻译中保持一致。
(注:删除此句)
来自Java标准库的相关示例以下是从Java平台来的五个抽象类:
java.util.AbstractList
(抽象列表类)java.util.AbstractMap
(抽象映射类)java.util.AbstractSet
(抽象集合类)java.io.Reader
(读取器类)java.nio.channels.spi.AbstractInterruptibleChannel
(可中断通道抽象类)
这里列出了Java库中的五个接口:
java.util.List
- Java中的列表类java.util.Map
- Java中的映射类java.util.Set
- Java中的集合类java.lang.Comparable
- Java中的可比较接口java.io.Serializable
- Java中的序列化接口
点击查看更多内容
为 TA 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦