你能在继承树中重新抽象一个方法吗?

2023-12-14

EDIT:

需要明确的是:设计相当丑陋并不是重点。关键是,设计已经存在,我面临的情况是必须添加另一个子类FlyingMotorizedVehicle如果我忘记添加,这将无法按预期工作foo(...)。所以我只是想知道是否可以将其重新定义为抽象。


我现在面临着一个非常奇怪的继承情况。 比方说,我有三节课,Vehicle, MotorizedVehicle and FlyingMotorizedVehicle以及一堆课程Airplane, Helicopter, ...:

public abstract class Vehicle {

    abstract Something doStuff(...);

    abstract SomethingElse doOtherStuff(...);

    abstract Foo bar(...);

}

public class MotorizedVehicle extends Vehicle {

    @Override
    Something doStuff(...) {
        return new Something();
    }

    @Override
    SomethingElse doOtherStuff(...) {
        return new SomethingElse();
    }

    @Override
    Foo bar(...) {
        return new Foo();
    }

}

public class FlyingMotorizedVehicle extends MotorizedVehicle {

    @Override
    SomethingElse doOtherStuff(...) {
        return new SomethingElse();
    }

}

public class Airplane extends FlyingMotorizedVehicle  {

    @Override
    Foo bar(...) {
        //do something different
        return new Foo();
    }

}

public class Helicopter extends FlyingMotorizedVehicle {

    @Override
    Foo bar(...) {
        //do something totally different
        return new Foo();
    }

}
[...]

So Vehicle是一个抽象类,提供一些抽象方法。MotorizedVehicle是一个子类Vehicle及其方法的具体实现。FlyingMotorizedVehicle又是一个子类MotorizedVehicle覆盖子集的实现MotorizedVehicle方法。

现在有子类Helicopter, Airplane以及示例中可能覆盖的其他一些内容的具体实现MotorizedVehicle#bar(...)。 我想要的是“强制”每个子类MotorizedVehicle必须覆盖bar(...)方法并提供自己的实现。

是否可以只改变FlyingMotorizedVehicle通过以下方式:

public class FlyingMotorizedVehicle extends MotorizedVehicle {

    @Override
    SomethingElse doOtherStuff(...) {
        return new SomethingElse();
    }

    abstract Foo bar(...);

}

所以我只是重新定义bar(...)作为抽象方法?我的 IDE 并没有抱怨它,但这当然并不意味着它真的可以工作。

我希望你明白我在这里试图指出的内容。

提前致谢

Bluddy


是的,你必须重新定义bar(...)作为抽象方法。 那么你必须声明public class FlyingMotorizedVehicle也作为一个抽象类

public abstract class FlyingMotorizedVehicle extends MotorizedVehicle {

    @Override
    SomethingElse doOtherStuff(...) {
        return new SomethingElse();
    }

    abstract Foo bar(...);

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

你能在继承树中重新抽象一个方法吗? 的相关文章

随机推荐

  • Grails:动态过滤 Grails 表中的数据

    我有一张桌子 上面有一系列的事件 我的班级名称是Entry 这是我的桌子的照片 是西班牙语 但基础知识是相同的 所以应该不成问题 过滤器 HTML 代码还没有 所以很乱 但它可以工作 这是我查找条目时得到的结果 现在我的问题是我需要将结果显
  • 无法获得摘要身份验证以与 Node.js 一起使用

    我正在尝试使用来自 Gathercontent com 的 API 来使用 Node js 进行简单的 摘要身份验证 一切似乎都正常 除了我仍然收到如下所示的 错误凭据 响应 success false error Wrong Creden
  • 如何在 Android 中以编程方式触发自定义信息窗口

    但是 我使用自定义窗口信息 调用marker showInfoWindow 始终呈现默认窗口信息 而如果用户单击标记 则呈现自定义窗口信息不会出现问题 我可以以编程方式打开我的自定义窗口信息吗 我的情况是 当在地图上绘制标记时 一个特定标记
  • Knockout:无法处理绑定

    我之前问过这个问题 但没有得到答案 当我运行我的代码时收到此错误消息 Uncaught ReferenceError Unable to process binding visible function return editable Me
  • 将图像添加到 JPanel 背景

    如何将图像添加到 JPanel 背景 图像不会被缩放或调整大小 谢谢 author public class ImagePanel extends JPanel private Image image null public ImagePa
  • 有人成功将live555移植到android上吗?

    我一直在尝试建立live555根据本指南 https github com boltonli ohbee tree master android streamer jni 以及使用其他一些指南 但都无济于事 如果有人移植成功live555对
  • 是否可以在 SVG 元素的笔划上使用背景图像?

    正如问题所问 我试图弄清楚是否可以使用某种图案或重复的背景图像作为 SVG 路径的笔画 这可行吗 或者您仅限于颜色 TIA 您可以使用
  • 如何使用 < 从文本文件读取一整行

    我试图从某个文本文件中获取一整行而不是一个单词 直到它遇到空格 这里是源代码 include
  • Java错误:无法从void转换为int [] [重复]

    这个问题在这里已经有答案了 我不明白为什么java认为数组 thisRow 在传递到Arrays sort thisRow 时是无效的 thisRow 对我来说似乎是一个 int 这里有什么问题呢 错误消息 类型不匹配 无法在 Test m
  • 我的 LESS 数学运算在我的媒体查询定义中不起作用

    我试图使布局的断点变量较小 这样我就可以轻松地检查多个想法 但是 breakpoint 500px media all and min width breakpoint someid height 4321px media all and
  • 如何在Android 4.4中的onActivityResult中获取文件路径

    对于 android 4 3 及更早版本 我使用此方法 Uri myUri data getData Cursor cursor getContentResolver query myUri new String data null nul
  • pandas 箱线图中每个子图的独立轴

    下面的代码有助于获取具有独特颜色框的子图 但所有子图共享一组共同的 x 轴和 y 轴 我期待每个子图都有独立的轴 import pandas as pd import numpy as np import matplotlib pyplot
  • Excel VBA 中的 .NumberFormat 选项是什么?

    你能告诉我有哪些吗 NumberFormatExcel VBA 中的格式选项 如您所知 Excel 2010 支持以下类型 我知道我们可以将文本类型设置为 NumberFormat 或对于号码 NumberFormat 0 00000 您能
  • 有没有办法从字符串加载CSS和JavaScript?

    我见过很多从文件动态加载 CSS 和 javascript 的例子 这是一个很好的例子 但是有没有办法将 CSS 或 javascript 作为字符串加载呢 例如 类似 var style class width 100 document
  • 如何将 numpy 数组流式传输到 pyaudio 流中?

    我正在编写一个代码 该代码应该根据用户的操作向其提供一些音频输出 并且我想生成声音而不是固定数量的声音wav要播放的文件 现在 我正在做的是生成 numpy 格式的信号 将数据存储在wav文件 然后将相同的文件读入pyaudio 我认为这是
  • 在输入文本上触发 jQuery 的按键事件

    关于 trigger method the Event object the which财产 the JS 字符代码和下面的代码 为什么 example输入没有得到字符a as 自动写入价值 我是否误解了 trigger method
  • 使用 SimpleXMLElement 读取 `` 中的文本[重复]

    这个问题在这里已经有答案了 我正在导入 RSS 提要SimpleXMLElement在 PHP 中 我对标题和描述有疑问 由于某种原因 我获取提要的网站将标题和描述放入
  • 让 chrome 显示 rss feed (2)

    这个问题是这个问题的后续问题 使用 google chrome 查看 rss feed 我从此页面复制了源代码 希望这对网站所有者来说没问题 http www petefreitag com rss 我转义了所有引号并用它制作了一个 php
  • Python函数参数作为全局变量

    我编写了以下函数 它接受一个变量input name 然后用户输入一些值 该值被分配给input name 我想知道最好的制作方法input name可在函数外部访问 我知道在函数内部将变量定义为全局变量意味着可以在函数外部使用该变量 然而
  • 你能在继承树中重新抽象一个方法吗?

    EDIT 需要明确的是 设计相当丑陋并不是重点 关键是 设计已经存在 我面临的情况是必须添加另一个子类FlyingMotorizedVehicle如果我忘记添加 这将无法按预期工作foo 所以我只是想知道是否可以将其重新定义为抽象 我现在面