举例说明抽象类和接口的异同,用代码表示
时间: 2024-10-19 22:14:57 浏览: 32
抽象类和接口都是在面向对象编程中用于实现多态性和代码复用的重要机制,但它们有明显的区别:
**相同点:**
1. 都支持多态性:无论是通过继承抽象类还是实现接口,都可以创建出多种不同的行为版本。
2. 提供公共方法签名:抽象类和接口都定义了一组方法,其他类需要按照这些签名去实现。
**不同点:**
1. **实现方式**:
- 抽象类可以包含常量、变量、抽象方法(无方法体)、默认方法(子类可以选择覆盖也可以直接使用)。例如:
```java
abstract class Animal {
public abstract void sound();
private int age;
// 具体实现...
}
```
- 接口只包含常量(final修饰的变量)和抽象方法(无方法体),不允许提供具体实现。例如:
```java
interface IAnimal {
void sound();
}
```
2. **继承限制**:
- 类只能继承一个抽象类,但可以实现多个接口。例如:
```java
class Dog extends Animal implements IAnimal {
// 实现Animal和IAnimal的方法...
}
```
- 如果一个类实现了接口,那么它必须实现接口的所有方法,除非该接口已经被声明为`@FunctionalInterface`。
3. **实例化**:
- 抽象类本身不能实例化,通常是为了作为基类创建子类的对象。
- 接口也不能实例化,但可以创建接口的匿名内部类或者实现类的实例。
**
阅读全文