是否有理由使用抽象类来定义类中的每个方法?

2023-12-19

抽象类似乎意味着该类的定义不完整,因此无法实例化。

我看到了一些简单的 Java 代码,其中有一个抽象类,其中定义了所有方法。然后我想知道,为什么他们将其作为抽象类而不是真正的类?他们这样做是为了让我们无法从这个抽象类实例化吗?或者他们从创建一个定义了所有内容的抽象类中获得了其他好处?


有可能即使所有方法都有默认实现,但这些实现实际上并不是有意义的在应用程序的上下文中。这些方法可能只进​​行内部簿记,而实际有用的实现必须由派生类提供,该派生类执行其需要执行的操作,然后调用超类方法。

然而,这只是猜测。您必须展示一个实际示例来说明这种设计的原因是什么。

作为一个例子,我们以一个简单的游戏引擎为例。我有很多不同的GameObject在我的游戏中。

  • 有些是可见的,所以我的基础课得到了draw()方法。但可能存在根本不显示的触发区域等不可见对象,因此我在基类中将其实现为无操作。

  • 有些人在与某物碰撞时会做某事,因此每个人都会得到一个collide(other)方法。但有些碰撞时不会做任何事情,就像纯粹的视觉粒子效果一样,所以我还在基类中提供了一个无操作。

  • 有些人每场比赛都会做一些事情,所以他们得到了update()方法。但有些物体(例如墙)本身可能根本不起任何作用。所以我也为此提供了一个禁止操作。

那么,当我有一个不可见的对象,它本身不做任何事情并且不与任何东西交互时,我该怎么办?没有理由在游戏中出现这个。所以我做了这个基础课abstract. 理论上你可以实例化它,因为所有方法都有一个实现,但是几乎你没有理由这样做,当你尝试时,你误解了我的游戏引擎的工作原理。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

是否有理由使用抽象类来定义类中的每个方法? 的相关文章

  • Java 字符串哈希码缓存

    字符串不变性的优点之一是哈希码缓存以实现更快的访问 在这种情况下 如何处理具有相同哈希码的字符串的缓存 在这种情况下它真的能提高性能吗 在这种情况下 如何处理具有相同哈希码的字符串的缓存 被缓存的是字符串的哈希码 它被缓存在私有的int字符
  • H.323,如何制作一个没有媒体的简单环。该脚本遵循 Q.931 设置,但仍然无法正常工作

    谁能帮我解决这个问题吗 当我发送此请求时 我在wireshark中看到数据包将发送到1720 tcp端口中的SJPhone 但 SJPhone 仍然没有响铃 我想让它响起 无论媒体 我非常感谢您的支持 我一定缺少消息协议细节来实现这个 请给
  • 如何实现具有LinkedHashMap类似功能的ConcurrentHashMap?

    我用过LinkedHashMap with accessOrdertrue 并同时允许最多 500 个条目作为数据的 LRU 缓存 但由于可扩展性问题 我想转向一些线程安全的替代方案 ConcurrentHashMap在这方面似乎不错 但缺
  • Java中的文字赋值[重复]

    这个问题在这里已经有答案了 定义上有什么区别 double example 23 1d or double example 23 1 为什么long float double可以以l f d结尾 之间没有区别double example 2
  • 如何在Spring Boot中初始化一次MongoClient并使用它的方法?

    您好 我正在尝试导出MongoClient在 Spring Boot 中成功连接后 我尝试在其他文件中使用它 这样我就不必每次需要在 MongoDB 数据库中进行更改时都调用该连接 连接非常简单 但目标是将应用程序连接到我的数据库一次 然后
  • ResultSet:通过索引检索列值与通过标签检索

    使用 JDBC 时 我经常遇到这样的结构 ResultSet rs ps executeQuery while rs next int id rs getInt 1 Some other actions 我问自己 以及代码作者 为什么不使用
  • SwingWorker 在另一个 SwingWorker 的 did 方法中

    首先 我需要通知您 我正在尽最大努力学习如何用 Java 编写代码 虽然有点困难 但我相信我能做到 我过去提交了几个有关 SwingWorkers 等的问题 每一个我都以为我已经做到了 但后来发现我仍然需要学习 希望这一次不是那样的一次 话
  • 如何在 JdbcTemplate 中创建 mySQL 存储过程

    背景 为了解决 MySql 中某些语句只允许在存储过程中出现的问题 我尝试在 JdbcTemplate 提交的 sql 中创建 运行然后删除存储过程 一个简单的例子是 这恰好是在 Spring Boot 中 Service public c
  • C++中的类查找结构体数组

    我正在尝试创建一个结构数组 它将输入字符串链接到类 如下所示 struct string command CommandPath cPath cPathLookup set an alarm AlarmCommandPath send an
  • 两条腿的 OAuth 和 Gmail Atom feed

    我们正在尝试让 2 legged OAuth 与 Gmail Atom feed 一起使用 我们使用 John Kristian Praveen Alavilli 和 Dirk Ba lfanz 贡献的 Java 库 http oauth
  • 使用 JNI 从 Java 代码中检索 String 值的内存泄漏

    我使用 GetStringUTFChars 从使用 JNI 的 java 代码中检索字符串的值 并使用 ReleaseStringUTFChars 释放该字符串 当代码在 JRE 1 4 上运行时 不会出现内存泄漏 但如果相同的代码在 JR
  • JFrame Glasspane 也优于 JDialog,但不应该

    我有一个带有 Glasspane 的 JFrame 未装饰 该框架打开一个 JDialog 也未装饰 也有一个 glassPane 并隐藏自身 setVisible false Glasspanes 通过 setGlassPane 设置 对
  • 获取包中声明的所有 Java 类的名称

    我正在编写一个功能 它将有助于将类放入我的程序的某个包中 另外 我只想要子类某个类的类 我需要这些类才能调用它们的静态方法 有没有一种自动的方法来做到这一点 如果是的话 速度慢吗 如果我不清楚 我想要的是这样的 ArrayList
  • 春季MVC。方法参数字段的默认值

    我有一个带有方法测试的简单控制器 RequestMapping produces application json ResponseBody public HttpEntity
  • Java 验证日期为 yyyyMMddHHmmss

    我想在java中验证给定的日期格式为yyyyMMddHHmmss 状况 应符合格式 yyyyMMddHHmmss 它应该验证当前日期 它应该验证与当前小时有 3 小时或 3 小时差异的小时数 如果满足所有三个条件 Java 方法应返回 tr
  • 如何在速度模板中检索哈希图值

    如何从速度模板中的以下哈希图中检索值 请帮忙 LinkedHashMap
  • ASTParser:解析绑定后查找声明节点

    我创建了一个启用了绑定的 AST 当我稍后解析绑定时 我得到了一个有效的 ITypeBinding 但是 当我想要获取绑定的声明 Node 时 它 总是返回 null 除非 ITypeBinding 在 sourceFile 中声明 这是我
  • Spring Transactional 减慢了整个过程

    我正在尝试分析我有两堂课的情况 其中一个类是 ProcessImpl 它是起点并在内部调用其他子事务 我不知道出了什么问题 processImpl正在导入一些东西并将相关数据写入数据库 Specs Spring orm版本 3 2 18 发
  • 如何在 Log4j2 - JSON 布局中自定义或删除默认属性

    In Spring Boot 2我已配置的应用程序Log4j2 with JsonLayout像下面这样
  • Lucene/Hibernate 搜索锁定异常

    我使用 Hibernate Search 在 Web 应用程序上索引和全文搜索项目 没有问题 来自我的 pom xml

随机推荐

  • 可以合并多个输入,每个输入都使用不同来源的 typeahead.js 吗?

    我有一个包含大量文本输入的表单 我想将其中 10 个文本输入与 Bloodhound 一起使用 typeahead js 我让它适用于其中的两个 它们都包括预取和远程数据源 但是 typeahead Bloodhound 的每个实例都有相当
  • 如何使用 Highcharts Drupal 7 模块

    如何使用 Highcharts Drupal 7 模块 我尝试使用视图集成 但设置不可用 但我看到了一个图像http drupal org files views settings png http drupal org files vie
  • Javascript、HTML 和 onClick - 函数未定义

    我正在尝试用 Javascript 制作一个指向富文本编辑器的 插入链接 按钮 基本上 它要做的就是将以下代码添加到其内容中 a href linkGoesHere textGoesHere a 问题是 someJSFunction 当用户
  • 如何使这个线程安全

    我有以下用于 Fluent NHibernate 的 SessionFactory 我收到一个错误 创建 SessionFactory 时使用了无效或不完整的配置 带有 InnerException 的 已添加具有相同密钥的项目 这个问题只
  • 通过添加当前电脑名称来批量重命名电脑

    背景 我作为分包商将数千台计算机从 xp 迁移到 7 这些计算机位于域中 我们拥有在域中添加 修改和删除计算机的管理员权限 当我们第一次接触xp机器时 我们必须在名称前面添加 delete 并重命名 例如 旧名称 pc12345 新名称 d
  • XSLT:包含()多个字符串

    我在 XSLT 中有一个名为variable name我想设置为1 如果相关产品具有名称为 A 或 B 或同时具有 A 和 B 的属性
  • Firestore:授予权限的交易被拒绝

    我们正在访问火库来自我们的 Java 应用程序引擎实例 非事务性请求成功成功 但事务性请求失败并出现错误 firestore PERMISSION DENIED Missing or insufficient permissions 交易示
  • 根据 LatLng 列表计算总距离

    我使用 dart flutter 和 package latlong latlong dart 将 GPX 文件解析为 LatLng 对象列表 这工作正常 但下一步是找到路线的总距离 这里的问题是 如何从 LatLng 对象列表中获取总距离
  • Windows Phone 8 应用程序中的应用内购买有限制吗?

    我们发布了 WP8 应用程序 用于使用应用程序内购买来购买杂志 报纸 我们为每一期创建了单一应用内购买 一些订阅和 10 包应用内购买WP Store 中为该应用定义了 134 个应用内购买 问题是 CurrentApp LoadListi
  • Flutter:pub 已完成,退出代码为 255

    我正在通过构建运行器 json 模型和 json 可序列化为我的 flutter 应用程序制作模型 但我收到了这个错误 Unhandled exception RangeError index Invalid value Valid val
  • 这段代码是否正确(数字加数字,然后打印结果)

    我想用汇编语言做一些简单的事情 两个数字相加 并将结果打印在屏幕上 我做了那个代码 Model SMALL Stack 100h Code start MOV ax 10 ADD ax 5 MOV ah 02h INT 21h MOV ah
  • 如何在 JSP 中导入我的导入内容?

    我所有的 JSP 顶部都有这个
  • 在 iPhone 上将整个 pdf 页面解析为 NSString

    我一直在尝试将 pdf 页面的文本解析为 NSString 一段时间 我唯一能找到的是搜索特定字符串值的方法 我想做的是解析单页 PDF 而不使用任何外部库 如 PDFKitten PDFKit 等 如果可能的话 我希望将数据存储在 NSA
  • 当 fit_intercept=False 时,为什么 Sklearn R 平方与 statsmodels 不同?

    我正在使用 Sklearn 和 statsmodels 执行线性回归 我知道 Sklearn 和 statsmodels 会产生相同的结果 如下所示 Sklearn 和 statsmodels 得到了相同的结果 但即使截距为零时系数相同 结
  • 更新 NSWindow 内容大小以适合 SwiftUI 视图

    我有一个 SwiftUI 视图 由于可变长度字符串 例如由于本地化 它不知道大小 我需要包含NSWindow调整大小以修复内容 我可以提供固定 最小宽度 使用 AppKit 委托创建新的 Mac 应用程序会产生一个相当简单的 AppDele
  • java 中的可选数据异常

    package com n import java io FileInputStream import java io FileOutputStream import java io IOException import java io O
  • 限制 DevExpress TextEdit 和 MemoEdit 控件的输入长度

    我有一个项目 其中包含一些第三方控件 我的表单中有一个 TextEdit 和一个 MemoEdit 我想限制用户可以输入的字符数 您可以等待最新版本 但有一些解决方法 例如屏蔽 辅助属性和 或文本更改事件的字符计数 以下是一些解决方法的链接
  • 使用纯文本文件存储任意元数据

    我正在编写一个文本编辑器 我需要在应用程序保存的每个文件中存储一些信息 通常只是几个字符串 存储不需要特别耐用 而不是文本文件的一部分 因为其他应用程序可能会读取它 并且该信息仅特定于我的应用程序 我该怎么办呢 更多信息 我设置了一个 NS
  • 严格的指针别名:针对特定问题的任何解决方案?

    我遇到了由于违反严格的指针别名规则而引起的问题 我有一个类型T来自模板和一些整数类型Int相同大小 如sizeof 我的代码基本上执行以下操作 T x some other t if reinterpret cast
  • 是否有理由使用抽象类来定义类中的每个方法?

    抽象类似乎意味着该类的定义不完整 因此无法实例化 我看到了一些简单的 Java 代码 其中有一个抽象类 其中定义了所有方法 然后我想知道 为什么他们将其作为抽象类而不是真正的类 他们这样做是为了让我们无法从这个抽象类实例化吗 或者他们从创建