CodeRoadMap
首页路线题库资源库文章社区
CodeRoadMap

程序员的学习成长路线图。内容免费开放,登录后可同步路线图与课时进度。

由 程序员柏风 独立维护 · 关于作者

学习

  • 路线图
  • 课程
  • 面试题
  • 文章
  • 我

更多

  • 资源
  • 社区
  • 关于作者
  • 内容说明

© 2026 CodeRoadMap

津ICP备2026012044号-1·津公网安备12011002026155号·coderoadmap@126.com
Java 核心深化/课时/抽象与接口
RawBlame
课时目录12 节

Java 核心深化

  1. 01Java 核心地图
  2. 02类型与变量
  3. 03控制流
  4. 04类与对象
  5. 05抽象与接口
  6. 06集合框架
  7. 07Lambda 与 Stream
  8. 08并发基础
  9. 09I/O 与 NIO
  10. 10构建工具
  11. 11测试与 JUnit
  12. 12综合练习

抽象与接口

abstraction、interfaces、nested-classes。

30 分钟

抽象与接口

java-inheritance 已讲继承——本课深化 抽象类、接口、default 方法、嵌套类,在「复用」与「解耦」之间做正确选型。

学习目标

  • 区分 abstract class 与 interface 的适用场景
  • 使用接口 default/static 方法组织 API
  • 用静态/内部类表达紧密耦合的辅助类型

抽象类 vs 接口

abstract classinterface
实例字段可以有只有 public static final 常量
构造器有无
多继承单继承类可实现多接口
典型用途共享状态与模板方法能力契约、策略
public abstract class AbstractLesson {
    protected final String slug;

    protected AbstractLesson(String slug) {
        this.slug = slug;
    }

    public abstract String renderHtml();
}

public interface Publishable {
    boolean isPublished();
    default void publish() {
        throw new UnsupportedOperationException();
    }
}

public class MarkdownLesson extends AbstractLesson implements Publishable {
    private boolean published;

    public MarkdownLesson(String slug) { super(slug); }

    @Override
    public String renderHtml() { return "<article>" + slug + "</article>"; }

    @Override
    public boolean isPublished() { return published; }
}

选型口诀:IS-A 且共享代码 → 抽象类;CAN-DO 能力 → 接口。

嵌套类

public class TrackCatalog {
    private final Map<String, Lesson> bySlug = new HashMap<>();

    public Iterator<Lesson> iterator() {
        return new LessonIterator();
    }

    private class LessonIterator implements Iterator<Lesson> {
        private final Iterator<Lesson> delegate = bySlug.values().iterator();
        @Override public boolean hasNext() { return delegate.hasNext(); }
        @Override public Lesson next() { return delegate.next(); }
    }

    public static final class Builder {
        private String slug;
        public Builder slug(String slug) { this.slug = slug; return this; }
        public TrackCatalog build() { return new TrackCatalog(slug); }
    }
}
  • 内部类 持有外部类引用,可访问外部私有成员
  • static 嵌套类 不持有外部引用,常用作 Builder
  • 匿名类 已被 Lambda 大量取代(见 )
jvc-functional

与进阶课的关系

jva-records 与 sealed 类进一步约束 数据载体;本课的接口思维是 Spring 面向接口编程 的前奏。

练习

  • 定义 Renderable 接口与两个实现类
  • 用 static 嵌套 Builder 构建 Track
  • 说明何时用 abstract class 而非 interface

小结

抽象类共享骨架,接口声明能力,嵌套类收拢辅助类型。 下一课集合框架:Map、Deque 与 Iterator。

加载本节练习…
← 上一课类与对象下一课 →集合框架