在java中,比较抽象类和接口的相同点和不同点,以及他们的关系,举例子
时间: 2024-10-09 16:04:27 浏览: 25
javaDuiXiang.zip_Java类和对象
在 Java 中,抽象类和接口都是用于实现多态的重要工具,它们有相似之处也有区别。
**相同点:**
1. **都支持继承**: 抽象类可以被其他类继承,接口也是通过实现来关联到具体的类。
2. **都可以包含常量**: 都可以定义常量 (static final) 提供默认值给实现者。
3. **都有抽象方法**: 如果一个类或者接口里包含了至少一个未实现的方法,那么它就被声明为抽象的。
**不同点:**
1. **实现方式**: 抽象类允许部分实现,提供一些默认的行为,而接口只有纯抽象方法,不允许有方法体。
2. **实例化限制**: 只能创建抽象类的子类的对象,但可以创建接口实现类的对象。
3. **访问修饰符**: 接口中的成员默认是公共的,而在抽象类中,成员可以根据需要设置访问权限。
4. **构造函数**: 抽象类可以有一个或多个构造函数,而接口不允许。
**关系及例子:**
例如,假设我们有一个车的抽象概念,我们可以定义一个抽象类 `Vehicle`,提供一些共同的行为如 "start" 和 "stop" 方法:
```java
abstract class Vehicle {
abstract void start();
abstract void stop();
}
```
然后我们可以定义一个接口 `Driveable`,表示车辆可以被驾驶:
```java
interface Driveable {
void drive();
}
```
在这个场景下,如果要创建一个具体的汽车类 `Car`,它既是 `Vehicle` 的子类,又是 `Driveable` 的实现:
```java
class Car extends Vehicle implements Driveable {
@Override
void start() { /* ... */ }
@Override
void stop() { /* ... */ }
@Override
public void drive() { /* ... */ }
}
```
这里,`Car` 就体现了抽象类和接口的结合,它既实现了 `Vehicle` 的抽象方法,也实现了 `Driveable` 接口。
阅读全文