文章内容发布于 30 天前;最后修改于 30 日前。其中的信息可能发生变化或产生更改,敬请留意。
java面向对象(抽象)
抽象类和抽象方法
抽象类
抽象类:如果一个类中存在抽象方法,则该类必须声明为抽象类。如果类中没有抽象方法,则该类也可以申明为抽象类。
抽象类的定义格式:<权限修饰符> abstract <返回值类型> class <类名> {<方法体>}
抽象类的注意事项
- 抽象类不能创建对象(实例化);
- 抽象类中不一定有抽象方法,有抽象方法的类一定是抽象类;
- 抽象类可以有构造方法;
- 抽象类子类:
- 抽象类的子类重写父类(抽象类)中的所有抽象方法。
- 抽象类的子类本身也是抽象类。
抽象方法
抽象方法:将子类中共性的方法抽取到父类之后,由于每一个子类执行的方法体不一样,所以在父类中不能确认具体的方法体,则该方法可以被定义为抽象方法。
抽象方法的定义格式:<权限修饰符> abstract <返回值类型> <方法名>(<形参列表>);
代码
public class OOPAbstract {
public static void main(String[] args) {
Cat cat = new Cat();
cat.play();
Dog dog = new Dog();
dog.play();
}
}
abstract class Animal{
public abstract void play();
}
class Dog extends Animal{
@Override
public void play() {
System.out.println("狗摇尾巴");
}
}
class Cat extends Animal{
@Override
public void play() {
System.out.println("猫舔毛");
}
}
抽象类不能创建对象(实例化)

抽象类中不一定有抽象方法,有抽象方法的类一定是抽象类
抽象类中不一定有抽象方法

有抽象方法的类一定是抽象类

抽象类可以有构造方法
抽象类虽然不能直接实例化,但它的构造方法会在子类实例化时被调用,主要用于:
- 初始化抽象类中定义的成员变量
- 执行抽象类中必要的初始化逻辑
- 强制子类通过特定方式初始化父类状态

构造方法调用顺序:
- 创建子类对象时,先调用父类构造方法,再调用子类构造方法
- 子类构造方法中必须通过
super()显式或隐式调用父类构造方法
抽象的意义
将方法体不同的成员方法抽象,则子类必须重写对应的方法,形式参数和返回值必须完全相同,这样有利于:强制规范与约束、提高代码的可扩展性、实现多态,提高代码灵活性
- 标准化接口:确保所有子类都有相同的方法签名
- 强制实现:避免子类遗漏重要功能的实现
- 易于扩展:新增功能只需添加新的子类
- 代码复用:公共逻辑在抽象类中实现,避免重复代码
- 解耦合:使用抽象类型引用,降低模块间依赖