在 Java 中,抽象类是可以继承普通类的,这一点经常被忽略,但它是完全合法的。
下面分情况说明,并给出示例。
✅ 抽象类可以继承普通类
✅ 普通类也可以继承抽象类(必须实现抽象方法)
❌ 类不能继承多个类(Java 是单继承)
// 普通类
class Parent {
public void sayHello() {
System.out.println("Hello");
}
}
// 抽象类继承普通类
abstract class Child extends Parent {
public abstract void doSomething();
}
这是 完全合法的。
Parent 是一个普通类Child 是抽象类Child 继承了 Parent 的所有非 private 成员和方法Child 自己还可以定义抽象方法abstract class Child extends Parent {
public abstract void doSomething();
}
class GrandChild extends Child {
@Override
public void doSomething() {
System.out.println("Doing something");
}
}
public class Test {
public static void main(String[] args) {
GrandChild g = new GrandChild();
g.sayHello(); // 继承自 Parent
g.doSomething(); // 自己实现
}
}
✅ 输出:
Hello
Doing something
✅ 错
抽象类和普通类一样,可以继承其他类。
✅ 错
抽象类可以:
Objectclass BaseService {
public void log(String msg) {
System.out.println(msg);
}
}
abstract class AbstractService extends BaseService {
public abstract void process();
}
class DataSource {
public void connect() {
System.out.println("Connected");
}
}
abstract class DataProcessor extends DataSource {
public void execute() {
connect();
process();
}
protected abstract void process();
}
| 对比项 | 抽象类 | 接口 |
|---|---|---|
| 能否继承普通类 | ✅ 可以 | ❌ 不可以 |
| 能否有方法实现 | ✅ 可以 | ✅(Java 8+ default) |
| 构造方法 | ✅ 有 | ❌ 没有 |
| 单继承 | ✅ | ✅(接口可多实现) |
抽象类本质上也是类,完全可以继承普通类,只是在自身中允许存在未实现的抽象方法。
如果你愿意,我也可以从 JVM 层面 或 面试题常见坑点 再帮你梳理一遍。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。