如何定义抽象类和接口、 一个类如何继承抽象类同时实现接口的类方法的重写。举个例子
时间: 2023-07-04 20:10:03 浏览: 119
抽象类和接口都是Java中用于实现面向对象编程中实现多态性的机制。
抽象类是一种不能被实例化的类,它的存在是为了被子类继承。抽象类中可以包含抽象方法和非抽象方法。抽象方法是一种没有实现的方法,它只是定义了方法的名称、参数和返回类型,具体的实现由继承该抽象类的子类来实现。非抽象方法则是已经实现的方法,可以直接被子类使用或者重写。
接口是一种完全抽象的类,它只包含了方法的定义,没有任何实现。接口可以通过实现接口的类来实现接口中定义的方法,一个类可以实现多个接口。
一个类可以同时继承抽象类并实现接口。在这种情况下,子类必须实现抽象类中的所有抽象方法并重写接口中的所有方法。
以下是一个例子:
```
// 定义一个抽象类
abstract class Animal {
// 抽象方法
public abstract void move();
// 非抽象方法
public void eat() {
System.out.println("Animal is eating");
}
}
// 定义一个接口
interface Flyable {
public void fly();
}
// 定义一个子类,同时继承抽象类和实现接口
class Bird extends Animal implements Flyable {
// 实现抽象方法
public void move() {
System.out.println("Bird is moving");
}
// 实现接口中的方法
public void fly() {
System.out.println("Bird is flying");
}
}
// 测试
public class Test {
public static void main(String[] args) {
Bird bird = new Bird();
bird.move(); // 输出:Bird is moving
bird.fly(); // 输出:Bird is flying
bird.eat(); // 输出:Animal is eating
}
}
```
在上面的例子中,`Bird` 类同时继承了 `Animal` 抽象类并实现了 `Flyable` 接口。`Bird` 类必须实现 `Animal` 抽象类中的 `move()` 方法,并且重写 `Flyable` 接口中的 `fly()` 方法。同时,`Bird` 类还继承了 `Animal` 抽象类中的 `eat()` 方法。在 `main` 方法中,我们实例化了 `Bird` 类,并调用了 `move()`、`fly()` 和 `eat()` 方法,输出了相应的结果。
阅读全文