abstract class和interface有什么区别?举例
时间: 2024-09-08 19:04:05 浏览: 44
举例讲解JDK注解的使用和自定义注解的方法
在编程中,`abstract class`(抽象类)和`interface`(接口)都是用来实现抽象级别的不同方式,它们可以用于定义共享的行为和规范,但它们之间存在一些关键区别:
1. **实现方式**:
- `abstract class`:可以包含具体的方法实现(非抽象方法),也可以定义抽象方法。抽象类可以有构造器。
- `interface`:只能定义方法声明、常量、默认方法(Java 8及以上版本)和静态方法(Java 8及以上版本)。接口中不能包含实例变量。
2. **多重实现**:
- `abstract class`:一个类可以继承一个抽象类。
- `interface`:一个类可以实现多个接口。
3. **成员可见性**:
- `abstract class`:成员的可见性可以是 `private`、`protected`、`public`。
- `interface`:接口中的方法默认是 `public` 的,成员变量默认是 `public static final` 的,即常量。
**举例**:
```java
// 抽象类示例
abstract class Animal {
public abstract void makeSound();
// 抽象类可以有非抽象方法
public void eat() {
System.out.println("This animal eats food.");
}
}
// 接口示例
interface Flying {
void fly();
}
// 实现类,继承抽象类
class Bird extends Animal {
@Override
public void makeSound() {
System.out.println("Birds make a chirp sound.");
}
}
// 实现类,实现接口
class Airplane implements Flying {
@Override
public void fly() {
System.out.println("Airplanes fly with jet engines.");
}
}
```
在这个例子中,`Animal`是一个抽象类,它定义了一个抽象方法`makeSound`和一个非抽象方法`eat`。`Bird`类继承了`Animal`类,并提供了`makeSound`方法的具体实现。
`Flying`是一个接口,它定义了一个抽象方法`fly`。`Airplane`类实现了`Flying`接口,并提供了`fly`方法的具体实现。
阅读全文