是的,抽象类可以实现接口,而且这是 Java(以及其他支持接口和抽象类的语言)中非常常见、合法的用法。
下面从概念和示例来说明。
✅ 抽象类可以实现接口
✅ 抽象类在实现接口时,可以不实现接口中的方法
✅ 未实现的方法由抽象类的子类去实现
接口定义的是“能力/规范”,而抽象类介于接口和具体类之间:
default 方法)因此:
抽象类完全可以作为“接口和具体类之间的桥梁”
public interface Flyable {
void fly();
}
public abstract class AbstractBird implements Flyable {
// 不实现 fly(),留给子类
}
或者:
public abstract class AbstractBird implements Flyable {
public abstract void eat(); // 抽象类自己的抽象方法
}
public class Eagle extends AbstractBird {
@Override
public void fly() {
System.out.println("Eagle is flying");
}
@Override
public void eat() {
System.out.println("Eagle is eating");
}
}
✅ 完全合法,而且非常常见。
public interface Playable {
void play();
void stop();
}
public abstract class MediaPlayer implements Playable {
@Override
public void stop() {
System.out.println("Stop playing");
}
}
子类只需要关心 play()。
public interface Game {
void play();
}
public abstract class AbstractGame implements Game {
@Override
public void play() {
init();
start();
end();
}
abstract void init();
abstract void start();
abstract void end();
}
| 对比项 | 接口 | 抽象类 |
|---|---|---|
| 能否实现接口 | ✅ | ✅ |
| 是否能有方法体 | Java 8+(default) | ✅ |
| 是否有构造器 | ❌ | ✅ |
| 是否可有成员变量 | 常量 | ✅ |
| 是否可包含抽象方法 | ✅ | ✅ |
可以。抽象类可以实现接口,并且可以选择性地实现接口中的方法,未实现的方法由子类去完成。这在“接口 + 抽象类”的设计模式中非常常见。
如果你愿意,我也可以帮你对比 接口 vs 抽象类如何选择,或者结合 Spring / 设计模式 讲实际使用场景。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。