在 Java 中,抽象类(abstract class)是一种不能被直接实例化,主要用于被继承的类。它通常用来抽取多个子类的公共属性和行为,并可以包含抽象方法(只有声明、没有实现)和具体方法。
下面从 是什么 → 怎么写 → 怎么用 → 注意事项 给你讲清楚。
abstract class Animal {
// 抽象方法(没有方法体)
public abstract void sound();
// 具体方法
public void eat() {
System.out.println("吃东西");
}
}
特点:
abstract 修饰类abstract class Animal {
String name;
public Animal(String name) {
this.name = name;
}
// 抽象方法
public abstract void sound();
// 普通方法
public void show() {
System.out.println("我是" + name);
}
}
class Dog extends Animal {
public Dog() {
super("狗");
}
@Override
public void sound() {
System.out.println("汪汪汪");
}
}
class Cat extends Animal {
public Cat() {
super("猫");
}
@Override
public void sound() {
System.out.println("喵喵喵");
}
}
public class Test {
public static void main(String[] args) {
Animal a1 = new Dog();
Animal a2 = new Cat();
a1.show();
a1.sound();
a2.show();
a2.sound();
}
}
✅ 输出:
我是狗
汪汪汪
我是猫
喵喵喵
| 对比项 | 抽象类 | 接口 |
|---|---|---|
| 关键字 | abstract | interface |
| 能否有方法实现 | ✅ 可以 | Java 8+ 可以 |
| 成员变量 | 任意 | 默认 public static final |
| 单继承 | ✅ 只能继承一个 | 可实现多个 |
| 适用场景 | 有公共逻辑、状态 | 定义行为规范 |
✅ 多个类有相同属性和方法 ✅ 需要共享代码 ✅ 不希望被直接创建对象
例如:
Animal → Dog / CatShape → Circle / RectangleBaseController → UserControllernewAnimal a = new Animal(); // 报错
子类必须实现所有抽象方法(除非子类也是抽象类)
抽象类可以有 final 方法,但不能是 abstract final
构造方法用于子类调用
super(...)
抽象类 = 半成品模板
把共性放进去,把差异留给子类实现。
如果你愿意,我也可以:
你想看哪一个?
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。