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

基础知识:抽象类成员变量的继承与使用

抽象类成员变量的继承与使用

在Java面向对象编程中,子类会自动继承父类(包括抽象类)的所有成员变量(字段)和方法,无论这些成员是公共的(public)、受保护的(protected)还是默认的(包级私有)。

关于继承的关键点:
  1. 访问修饰符的影响
    • public:子类可直接访问
    • protected:子类可直接访问(即使不在同一包中)
    • 默认(无修饰符):子类必须在同一包中才能访问
    • private:子类无法直接访问(但可通过父类的公共方法间接访问)
  2. 原理
    • 当创建子类实例时,会先调用父类的构造函数初始化父类部分
    • 子类实例包含父类的所有成员变量和方法
    • 继承关系允许子类重用父类的代码,避免重复实现
示例
public abstract class IStringRedisService<T> {@Autowiredprotected RedisTemplate<String, Object> redisTemplate;@Resourceprotected ValueOperations<String, T> valueOperations;// ...其他方法
}@Component
public class DeviceCache extends IStringRedisService<Device> {// 子类可以直接使用父类的 redisTemplate 和 valueOperationspublic void someMethod() {// 直接调用父类的成员变量valueOperations.set(key, value);redisTemplate.expire(key, time, unit);}
}

示例中,通过继承IStringRedisService获得了:

  • redisTemplate:用于执行Redis命令(如expiregetExpire
  • valueOperations:用于操作Redis中的值(如setget

这些成员变量能够在子类中直接操作Redis缓存,而无需重新注入或初始化它们。

最佳实践建议:
  1. 使用protected而非private

    • 如果希望子类能够直接访问成员变量,建议使用protected而非private
    • 这符合"开放-封闭"原则,允许扩展但限制修改
  2. 封装复杂操作

    • 对于常用的Redis操作,可以在父类中封装为方法,子类直接调用
    • 例如:父类提供refreshExpire方法,子类只需传入参数即可
  3. 重写方法

    • 如果父类方法的行为不完全符合子类需求,可以在子类中重写该方法
    • 例如:子类可以重写put方法,添加自定义逻辑
http://www.xdnf.cn/news/13584.html

相关文章:

  • Web APIS Day04
  • BlogX项目数据库读写分离AI面试题
  • 海外打车代驾app多语言切换模块设计
  • CentOs7.x系列IP地址由动态改静态(解决远程连接掉线问题)
  • 字符串|数组|计算常见函数整理-竞赛专用(从比赛真题中总结的,持续更新中)
  • 7.Vue的compute计算属性
  • atomicity of memory accesses
  • 【知识图谱构建系列1】数据集介绍
  • 本地docker部署的dify,不用git命令如何无损升级?
  • Vue3前端项目Docker容器化部署工作报告
  • 【算法 day01】LeetCode 704二分查找 | 27移除元素 | 977有序数组的平方
  • 【电力物联网】SDN架构与工作原理介绍
  • ospfOSPF特殊区域及其他特性
  • Unicode:如何让用户东方不败和[Family: Man, Woman, Girl, Boy]顺利通过用户名长度检查?
  • 【Linux指南】文件系统基础操作与路径管理
  • 爬虫+动态代理助力 AI 训练数据采集
  • [未验证]abaqus2022 更改内置python
  • 选择与方法(4) 职场内篇 沿着赤道走,到不了北极,找准职场方向,建立可迁移技能
  • 智谱的AI Agent :CoCo
  • GIS数据制备,空间分析与高级建模实践技术应用
  • 软件确认测试报告:如何评估软件功能及测试关键点?
  • 第二届“Parloo”CTF应急响应挑战赛(应急响应题目复盘)
  • ptyhon 导入本地模块 no module named Python Error几种解决方案
  • Excel文件数据的读取和处理方法——C++
  • 华为云Flexus+DeepSeek征文 | 基于华为云ModelArts Studio搭建AnythingLLM聊天助手
  • 支持在Windows电脑上使用的备忘录提醒小软件
  • 【大模型训练】中短序列attention 和MOE层并行方式
  • Java八股文——Spring「SpringBoot 篇」
  • 工业相机如何提高传输速度
  • 【从入门到精通】GIS数据制备,空间分析与高级建模实践应用