首页 > 编程语言 >【JAVA】抽象类是什么?为什么要用抽象类?

【JAVA】抽象类是什么?为什么要用抽象类?

时间:2024-04-01 16:33:28浏览次数:17  
标签:为什么 makeSound JAVA 实现 Dog 抽象 抽象类 方法

抽象类是什么?

在面向对象编程(OOP)中,抽象类(Abstract Class)是一种特殊的类,它主要用于表示一组相关类的共同特征,但不能直接创建实例对象。抽象类通常包含抽象方法(Abstract Method),抽象方法没有具体实现,只有方法签名,即方法名、参数列表和返回类型,但没有方法体。

抽象方法在抽象类中用 abstract 关键字声明,例如:

abstract class Animal {
    // 抽象方法声明,没有方法体
    abstract void makeSound();
    
    // 普通方法,有具体实现
    void eat() {
        System.out.println("Animal is eating...");
    }
}

class Dog extends Animal {
    // 实现抽象类中的抽象方法
    void makeSound() {
        System.out.println("Dog says: Woof!");
    }
}

在这个例子中,Animal 是一个抽象类,它包含一个抽象方法 makeSound()。因为它是抽象的,所以不能直接创建 Animal 类的实例。然而,我们可以定义一个继承自 Animal 的具体子类,如 Dog 类,并在子类中实现抽象方法。这样,Dog 类就拥有了来自 Animal 类的特性,并实现了必需的具体行为。

woof 是在 Dog 类中实现 makeSound() 抽象方法时输出的。Dog 类继承自抽象类 Animal,并实现了抽象方法 makeSound()。具体实现如下:

class Dog extends Animal {
    void makeSound() {
        System.out.println("Dog says: Woof!"); // 这里输出 "Woof!"
    }
}

当你创建一个 Dog 类的实例并调用 makeSound() 方法时,就会执行这个实现,输出 "Dog says: Woof!":

public class Main {
    public static void main(String[] args) {
        Dog myDog = new Dog(); // 创建 Dog 类的实例
        myDog.makeSound(); // 调用 Dog 类中实现的 makeSound() 方法,输出 "Dog says: Woof!"
    }
}

执行 myDog.makeSound(); 时,程序会跳转到 Dog 类中 makeSound() 方法的实现,从而输出 "Dog says: Woof!"。

抽象类的目的在于提供一个通用模板,规定子类必须实现某些方法,以保持一致的行为。同时,抽象类可以包含已实现的方法和变量,子类可以直接继承这些功能,无需重新实现。抽象类常用于设计模式和架构中,以表达一种抽象概念或接口,并强制子类遵循一定的结构和约定。

为什么要用抽象类?

使用抽象类和抽象方法的原因是为了更好地体现面向对象编程的设计原则,特别是“单一职责原则”、“开放封闭原则”和“里氏替换原则”,以及支持面向接口编程和实现设计模式。以下是几个关键理由:

  1. 抽象和多态性: 抽象类和抽象方法使得你能够在多个类之间定义公共的接口或行为规范,而无需指定具体的实现细节。子类可以自由地实现这些抽象方法,从而表现出多态性。多态性是OOP的重要特性,它允许你写出更具通用性和扩展性的代码。

  2. 强制实现: 如果一个类继承自抽象类,那么它就必须实现抽象类中所有的抽象方法,这样可以确保子类具有某种共同的行为或能力。这对于大型项目或者框架来说尤其重要,可以确保所有实现该抽象类的类都有一定的契约一致性。

  3. 设计灵活性: 抽象类可以包含抽象方法和非抽象方法(已实现的方法)。这样,抽象类不仅可以定义接口,还可以包含一些通用的实现,子类可以复用这部分实现,同时也必须完成剩余的抽象方法。

  4. 接口与实现分离: 抽象类常常用来定义一个接口或蓝图,而具体的实现留给子类去做。这样有助于将接口设计和实现细节解耦,提高代码的可读性和可维护性。

  5. 支持层次化设计和扩展: 在设计层级复杂的系统时,抽象类可以作为一个中间层,起到承上启下的作用,使得类的层次结构更加清晰,有利于系统的扩展和演化。

  6. 适应变化: 根据“开放封闭原则”,抽象类使得系统更容易应对未来的变化。当需要添加新功能或调整现有功能时,只需在抽象类中增加新的抽象方法,然后在需要的地方实现它即可,无需修改现有的实现类。

因此,抽象类和抽象方法是设计中不可或缺的工具,它们帮助我们在面对复杂性和多样性时保持代码的整洁、可扩展和易于维护。

标签:为什么,makeSound,JAVA,实现,Dog,抽象,抽象类,方法
From: https://blog.csdn.net/wangyufei0815/article/details/137237654

相关文章

  • 【JAVA】try-catch结构:异常处理的使用
    try-catch 是Java和许多其他编程语言中用于异常处理的关键字组合,它允许程序员优雅地捕获和处理运行时可能出现的错误。以下是 try-catch 结构的详细说明:结构:try{//有可能抛出异常的代码块//这里可以调用方法、执行操作等riskyOperation();}catch(S......
  • 地方废物回收机构管理的设计与实现|Springboot+ Mysql+Java+ B/S结构(可运行源码+数据
    本项目包含可运行源码+数据库+LW,文末可获取本项目的所有资料。推荐阅读100套最新项目持续更新中.....2024年计算机毕业论文(设计)学生选题参考合集推荐收藏(包含Springboot、jsp、ssm+vue等技术项目合集)目录1.管理员功能效果图2.员工功能3.系统功能设计4.数据库E-R图设......
  • 基于vue的MOBA类游戏攻略分享平台的设计与实现|Springboot+Vue+ Mysql+Java+ B/S结构(
    本项目包含可运行源码+数据库+LW,文末可获取本项目的所有资料。现今,越来越多的人乐于选择一项合适的管理方案,但是普通用户往往受到管理经验地限制,这时MOBA类游戏攻略分享平台的崛起,大量游戏攻略进入人们生活,而MOBA类游戏攻略制无疑是游戏攻略管理的最好制度,在这样成功的管理模......
  • CSGO赛事管理系统的设计与实现|Springboot+ Mysql+Java+ B/S结构(可运行源码+数据库+
    本项目包含可运行源码+数据库+LW,文末可获取本项目的所有资料。在世界范围内,CSGO赛事管理系统已经得到了非常广泛的应用,范围变的越来越广,功能也在不断的完善,操作简便、节省人力、成本低廉,但工作的效率确一直不断的提高。为CSGO赛事行业管理全程提供自动化和全面的纪录,避免出错......
  • java几种代理模式的实现方式
    1.代理模式代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及事后处理消息等。代理类与委托类之间通常会存在关联关系,一个代理类的对象与一个委托类的对象关联,代理类的对象本身并不真正实......
  • JavaScript高级 —— 学习(四)(完结)
    目录一、深浅拷贝(一)浅拷贝1.浅拷贝的简单使用拷贝对象:拷贝数组:使用两种浅拷贝方法 2.浅拷贝的问题(二)深拷贝1.通过递归实现深拷贝递归函数:递归实现过程:其他问题:2.利用lodash实现深拷贝3.利用JSON实现深拷贝二、异常处理(一)抛出异常throw(二)捕获异常tryca......
  • 3D设计用虚拟云桌面的体验为什么不太好?
    3D设计是一项对计算资源要求极高的工作,设计师在进行3D建模、渲染和动画等操作时,需要高性能的计算机硬件支持。近年来,随着云计算技术的发展,越来越多的设计师开始尝试使用虚拟云桌面进行3D设计。尽管虚拟云桌面在理论上能够提供灵活、高效的计算资源,但在实际体验中,许多设计师却......
  • JavaScript事件流
    JavaScript的事件流主要包括三个阶段:捕获阶段、目标阶段和冒泡阶段。当一个事件发生时,如点击一个按钮,这个事件会从最外层的祖先元素(通常是window对象)开始向下传递,这是捕获阶段。当事件到达触发事件的目标元素时,进入目标阶段。然后,事件会从目标元素开始,向上冒泡到最外层的祖先元......
  • java大整数类
    importjava.util.ArrayList;publicclassBigIntimplementsComparable<BigInt>{privatestaticfinalcharMINUS_CHAR='-';privatestaticfinalcharPLUS_CHAR='+';//Savesthedigitsofthenumber-lastelemen......
  • 代码随想录算法训练营第二十五天(回溯2)|216. 组合总和 III、17. 电话号码的字母组合(JA
    文章目录216.组合总和III解题思路源码17.电话号码的字母组合解题思路源码216.组合总和III找出所有相加之和为n的k个数的组合,且满足下列条件:只使用数字1到9每个数字最多使用一次返回所有可能的有效组合的列表。该列表不能包含相同的组合两次,组合可......