温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

抽象类能继承普通类吗

发布时间:2026-08-30 21:31:08 来源:亿速云 阅读:90 作者:小樊 栏目:编程语言

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

四、常见误区澄清

❌ 误区 1:抽象类只能被继承,不能继承别人


抽象类和普通类一样,可以继承其他类。


❌ 误区 2:抽象类必须继承抽象类


抽象类可以:

  • 继承普通类
  • 继承抽象类
  • 直接继承 Object

五、抽象类继承普通类的典型使用场景

1️⃣ 在抽象类中复用已有实现

class BaseService {
    public void log(String msg) {
        System.out.println(msg);
    }
}

abstract class AbstractService extends BaseService {
    public abstract void process();
}

2️⃣ 模板方法模式(Template Method)

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 层面面试题常见坑点 再帮你梳理一遍。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI