java抽象类(abstract关键字)

抽象类

1、概念

抽象类解释:有抽象方法的类就是抽象类,用abstract关键字修饰。

抽象方法解释:没有方法体的方法就是抽象方法,用abstract关键字修饰。

抽象方法的由来:当需要定义一个方法,却不明确方法的具体实现时,可以将方法定义为abstract,具体实现延迟到子类。

注意:
1、抽象类不能被实例化。
2、抽象类中可以包含抽象方法(使用abstract关键字定义的方法,没有方法体)和非抽象方法(即普通方法,有方法体)。抽象类也可以不包含任何抽象方法,只是用来被其他类继承。
3、如果一个类包含至少一个抽象方法,那么这个类就必须被声明为抽象类。
4、抽象类的子类必须实现父类中的所有抽象方法:除非子类也是抽象类。如果子类没有实现父类中的所有抽象方法,则子类也必须被声明为抽象类。

2、代码示例

package test1;

abstract class Animal {
    int age = 1;
    public abstract void eat();
    abstract void bark();
}

class Dog extends Animal {
    int age = 2;
    @Override
    public void bark() {
        System.out.println("汪汪汪"); // 实现父类抽象方法
    }
    @Override
    public void eat() {
        System.out.println("吃骨头"); // 实现父类抽象方法
    }
}
class Cat extends Animal {
    int age = 2;
    @Override
    public void bark() {
        System.out.println("喵喵喵"); // 实现父类抽象方法
    }
    @Override
    public void eat() {
        System.out.println("吃小鱼干"); // 实现父类抽象方法
    }
}
public class demo {
    public static void main(String[] args) {
        Dog dog = new Dog();
        dog.bark(); // 输出:汪汪汪
        dog.eat(); // 输出:吃骨头
        Cat cat = new Cat(); 
        cat.bark(); // 输出:喵喵喵
        cat.eat(); // 输出:吃小鱼干
    }
}

代码中创建了一个抽象类Animal ,抽象类有两个子类Dog和Cat,在子类中实现了Animal 中的两个抽象方法,而且子类必须实现父类Animal 中的两个抽象方法。

package test1;

abstract class Animal {
    int age = 1;
    public abstract void eat();
    abstract void bark();
}

abstract class Mouse extends Animal {
    public abstract void run();
    public void eat() {
        System.out.println("吃大米");
    }
}

代码中新建了一个Mouse类,继承了抽象类Animal ,Mouse类可以不实现父类抽象方法,但必须添加abstract 关键字,将自己也定义为一个抽象类,当然Mouse类也可以添加自己的抽象方法。

3、使用场景

Java中抽象类主要用于提高代码的复用性、可维护性和扩展性。以下是一些具体的使用场景:

  1. 定义通用的属性和方法
    抽象类可以定义一些通用的属性和方法,供其子类继承和实现。这样可以避免在每个子类中重复定义相同的代码,提高代码的可维护性。例如,在软件开发中,经常需要处理各种数据模型,如动物、水果、员工等。这些数据模型通常具有一些共同的属性和方法,可以使用抽象类来定义这些共同点,让具体的子类来实现具体功能。

  2. 封装通用的逻辑
    抽象类可以封装一些通用的逻辑,例如数据库连接、文件读写等操作。在子类中,只需要实现具体的业务逻辑即可,无需关心底层的通用逻辑实现。这样可以提高代码的复用性和开发效率。

  3. 定义模板方法
    抽象类可以定义一个模板方法,其中包含了一系列的抽象方法和具体方法。这样,在子类中只需要实现具体的抽象方法,而具体方法则已经在抽象类中实现好了。这种方式可以提高代码的复用性和扩展性。模板方法设计模式就是基于这种思想实现的。

  4. 实现接口的部分方法
    如果一个类实现了一个接口,但是又不想实现接口中的所有方法,可以将该类定义为抽象类,只实现部分方法,将未实现的方法留给子类去实现。这样可以在一定程度上减少子类的工作量,同时保持接口的定义不变。

  5. 限制实例化
    抽象类不能直接实例化,它只能被继承。这种限制可以用来表示某个类是一个概念上的抽象,只能通过具体的子类进行实例化。这有助于防止创建无意义的实例对象,同时强制要求子类必须实现抽象类中定义的方法。

  6. 提供统一的接口
    在大型框架或库的开发中,抽象类经常用于提供统一的接口。通过定义抽象类,可以规范子类必须实现的方法和行为,从而保证整个框架或库的一致性和可扩展性。例如,在Spring框架中,就大量使用了抽象类来定义各种组件的通用行为。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kopokliv

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值