当前位置: 首页 > news >正文

【JavaSE】Java基础语法(十六):抽象类

文章目录

  • 1. 抽象类的概述
  • 2. 抽象类的特点
  • 3. 抽象类的实用价值
  • 4. 抽象类的案例


在这里插入图片描述

1. 抽象类的概述


在这里插入图片描述

当我们在做子类共性功能抽取时,有些方法在父类中并没有具体的体现,这个时候就需要抽象类了!
在Java中,一个没有方法体的方法应该定义为抽象方法,而类中如果有抽象方法,该类必须定义为抽
象类!


2. 抽象类的特点


  • 抽象类和抽象方法必须使用 abstract 关键字修饰
//抽象类的定义
public abstract class 类名 {}
//抽象方法的定义
public abstract void eat();
  • 抽象类中不一定有抽象方法,有抽象方法的类一定是抽象类
  • 抽象类不能实例化
  • 抽象类可以有构造方法
  • 抽象类的子类
  • 要么重写抽象类中的所有抽象方法
  • 要么是抽象类

3. 抽象类的实用价值

封装共性功能:抽象类可以封装多个子类共同拥有的功能,避免各自独立实现重复的代码。通过将共性行为定义在抽象类中,具体子类只需要实现自己的特殊逻辑即可,可以大大提高代码的复用性。

规范行为:抽象类通过定义抽象方法,规范了子类的行为,强制子类必须实现相关方法,从而避免了因漏实现或实现不当带来的问题;同时也增加了代码的易读性、易维护性。

反向控制:抽象类能够为子类提供基本行为框架,在子类中调用父类定义的具体方法和属性,以完成基本功能。子类通过继承与扩展的方式实现自己的特殊逻辑,这种反向控制能够在大型工程中有效地管理代码结构和维护。

技术支持:在框架设计、系统维护以及代码重构等过程中,抽象类可以提供技术支持和规范,将大型工程的不同部分组合起来形成协调有序的整体,并且能够保证不同部分之间的解耦和相互独立性。


4. 抽象类的案例


案例需求
定义猫类(Cat)和狗类(Dog)
猫类成员方法:eat(猫吃鱼)drink(喝水…)


实现步骤

  1. 猫类和狗类中存在共性内容,应向上抽取出一个动物类(Animal)
  2. 父类Animal中,无法将 eat 方法具体实现描述清楚,所以定义为抽象方法
  3. 抽象方法需要存活在抽象类中,将Animal定义为抽象类
  4. 让 Cat 和 Dog 分别继承 Animal,重写eat方法
  5. 测试类中创建 Cat 和 Dog 对象,调用方法测试

代码实现

动物类

public abstract class Animal {public void drink(){System.out.println("喝水");}public Animal(){}public abstract void eat();
}

猫类

public class Cat extends Animal {@Overridepublic void eat() {System.out.println("猫吃鱼");}
}

狗类

public class Dog extends Animal {@Overridepublic void eat() {System.out.println("狗吃肉");}
}

测试类

public static void main(String[] args) {Dog d = new Dog();d.eat();d.drink();Cat c = new Cat();c.drink();c.eat();//Animal a = new Animal();//a.eat();
}

在这里插入图片描述

http://www.lryc.cn/news/90619.html

相关文章:

  • 【Kafka】超详细介绍
  • 2023 华为 Datacom-HCIE 真题题库 07/12--含解析
  • Spring的作用域和生命周期
  • 岭回归有看点:正则化参数解密,显著性不再成问题!
  • Android 12.0修改recovery 菜单项字体大小
  • 【计算机网络】 7、websocket 概念、sdk、实现
  • python中的常见运算符
  • TypeScript类型
  • Integer源码
  • 【四】设计模式~~~创建型模式~~~建造者模式(Java)
  • MarkDown的基本使用方法
  • IDEA 安装配置步骤详解
  • 【网络】· 路由器中配置单臂路由和DHCP,VTP原理
  • Python 子域名扫描工具:使用多线程优化
  • 宝塔面板一键部署Z-Blog博客 - 内网穿透实现公网访问
  • 深入理解设计原则之单一职责原则(SRP)
  • 钉钉群通过短信转发器接收手机短信消息
  • 【C++模版】模版进阶 {非类型模版参数; 模版的特化; 模版的分离编译; 模版总结}
  • Azure Active Directory 的功能和优势
  • mysql查询语句执行过程及运行原理命令
  • 可视化探索开源项目的 contributor 关系
  • SpringBoot 实现启动项目后立即执行方法的几种方式
  • 2021第十二届蓝桥杯Python组国赛【真题+解析+代码】
  • 3D引擎渲染管理系统概览
  • 蔚来Java实习面经
  • nginx 搭建http-flv(rtmp)流媒体的一次尝试
  • Unity 工具 之 Azure 微软语音合成普通方式和流式获取音频数据的简单整理
  • 【A卡,Windows】stable diffusion webui下载安装避坑指南
  • 并发编程-系统学习篇
  • 在浏览器网页上使用JavaScript如何将mp4视频转换成gif动态图片