类与接口抽象类和接口的对比代码
时间: 2023-06-12 08:04:00 浏览: 128
Kotlin接口与抽象类的详细解析及应用场景
以下是一个示例代码,比较了抽象类和接口的区别:
```java
// 抽象类
abstract class Animal {
String name;
int age;
public Animal(String name, int age) {
this.name = name;
this.age = age;
}
abstract void sound();
}
// 接口
interface Flyable {
void fly();
}
class Bird extends Animal implements Flyable {
public Bird(String name, int age) {
super(name, age);
}
@Override
void sound() {
System.out.println("Tweet tweet");
}
@Override
public void fly() {
System.out.println("I'm flying");
}
}
class Main {
public static void main(String[] args) {
Animal animal = new Bird("Polly", 2);
animal.sound(); // 输出: Tweet tweet
Flyable flyable = new Bird("Tweety", 1);
flyable.fly(); // 输出: I'm flying
}
}
```
在这个示例中,抽象类 `Animal` 和接口 `Flyable` 都定义了一个方法,但是它们之间有几个区别:
- 抽象类可以定义普通成员变量和方法,而接口只能定义常量和抽象方法。
- 类只能继承一个抽象类,但可以实现多个接口。
- 在 Java 中,一个类可以同时继承一个抽象类并实现多个接口。
- 对于抽象类,子类必须实现所有抽象方法,但不需要实现普通方法。对于接口,实现类必须实现接口中的所有方法。
在示例代码中,`Bird` 类继承了 `Animal` 抽象类并实现了 `Flyable` 接口。它必须实现 `Animal` 中的抽象方法 `sound()`,同时也必须实现 `Flyable` 中的方法 `fly()`。在 `Main` 类中,我们可以看到如何使用这些类和接口的实例。
阅读全文