【Java 基础】抽象类 abstract,到底什么时候用?

📅 2026/8/10 1:33:35
【Java 基础】抽象类 abstract,到底什么时候用?
简介abstract 抽象类是面向对象非常核心的知识点面试经常问抽象类能不能 new抽象方法有什么特点抽象类和普通类区别是什么。本篇用大白话讲透抽象类附带代码示例帮你搞懂业务开发中该怎么使用。前言有些父类我们只想要定义一套规范并不想把方法写完整交给子类去实现。 比如动物会叫但是猫怎么叫、狗怎么叫父类不知道只能交给子类自己实现。这种场景就适合用 abstract 抽象类。一、什么是抽象类 抽象方法被 abstract 修饰的类 抽象类被 abstract 修饰没有方法体的方法 抽象方法重点规则 1. 抽象类不能直接 new 实例对象只能用来被继承 2. 包含抽象方法的类必须是抽象类 3. 抽象方法只有方法声明没有 {} 方法体子类继承后必须重写所有抽象方法代码示例// 抽象动物父类 abstract class Animal{ //抽象方法没有方法体交给子类实现 public abstract void shout(); //抽象类中可以有普通成员方法 public void sleep(){ System.out.println(动物睡觉); } } //子类继承抽象类必须实现全部抽象方法 class Cat extends Animal{ Override public void shout() { System.out.println(小猫喵喵叫); } } class Dog extends Animal{ Override public void shout() { System.out.println(小狗汪汪叫); } } public class Test { public static void main(String[] args) { //Animal animal new Animal(); //报错抽象类不能new Animal cat new Cat(); cat.shout(); cat.sleep(); Animal dog new Dog(); dog.shout(); } }输出结果小猫喵喵叫 动物睡觉 小狗汪汪叫二、抽象类的几条高频规则1. 抽象类可以拥有成员变量、普通方法、构造方法注意抽象类有构造方法但不是用来 new 自己是给子类 super () 调用2. 抽象方法只能存在抽象类中普通类不能写 abstract 方法3. 子类继承抽象类要么重写全部抽象方法要么子类自己也定义成 abstract 抽象类4.abstract 不能和 private、final、static 一起使用final被 final 的方法不能重写abstract 强制要求子类重写二者冲突private私有方法子类访问不到无法实现抽象方法冲突三、抽象类解决什么问题1. 提取子类共同代码放到父类代码复用2. 定义一套统一规范强制子类必须实现某些功能约束子类行为业务场景举例做支付抽象 Payment 支付类写抽象 pay () 方法微信支付、支付宝支付子类各自实现 pay 逻辑。四、面试高频总结1. 抽象类可以有构造器吗✅可以供子类调用2. 抽象类可以没有抽象方法吗✅可以但是类依然不能 new3. 抽象类可以有 static 静态方法吗✅可以4. 能不能用 final 修饰抽象类❌不行冲突思考题抽象类和普通类最大区别是什么抽象类和接口有什么不一样