Java之抽象类和接口
在Java中,抽象类和接口都用于定义行为的规范,但它们之间有一些关键的区别:
继承和实现方式不同:
- 抽象类可以被继承,一个子类只能继承一个抽象类。
- 接口可以通过实现(
implements
)被使用,一个类可以实现多个接口。
默认方法实现和静态方法不同:
- 抽象类可以有默认的方法实现,接口中的方法都是抽象的。
- 接口可以包含静态方法和默认方法(Java 8+),抽象类不能包含静态方法。
- 接口成员的默认访问权限是public,抽象类成员可以有更宽松的访问权限。
下面是一个抽象类和接口的简单示例:
// 抽象类示例
abstract class Animal {
abstract void makeSound();
// 抽象类可以有非抽象方法
public void sleep() {
System.out.println("Zzz");
}
}
// 接口示例
interface Flyable {
void fly();
}
// 实现接口的类
class Bird extends Animal implements Flyable {
@Override
void makeSound() {
System.out.println("Chirp");
}
@Override
public void fly() {
System.out.println("Flapping wings");
}
}
public class AbstractVsInterfaceExample {
public static void main(String[] args) {
Bird bird = new Bird();
bird.makeSound();
bird.fly();
bird.sleep();
}
}
在这个例子中,Animal
是一个抽象类,它定义了一个抽象方法makeSound
。Bird
类继承了Animal
类并实现了Flyable
接口,它必须实现makeSound
方法和接口中的fly
方法。
评论已关闭