【问题标题】:Java Overriding and Overloading throw errors at compile time?Java覆盖和重载在编译时抛出错误?
【发布时间】:2011-05-12 07:25:38
【问题描述】:

我编写了一些关于方法重载和方法覆盖的示例。 方法重载是静态多态,重载是动态多态。

所以任何与重载相关的错误都将在编译时被捕获..正确的?或者是否存在由于不正确的重载而引发运行时异常的情况——我怀疑

任何与方法覆盖相关的错误(--如果子类方法与基类同名且参数与基类相同----)将在编译时抛出。

以上两种情况是否存在运行时出现异常的情况?

【问题讨论】:

    标签: java oop polymorphism overloading overriding


    【解决方案1】:

    所以任何与重载有关的错误 将在编译时被捕获 时间..正确?或者有没有 运行时异常的场景 因为不正确而抛出 重载——我怀疑

    如果您的方法中的代码没有引发任何运行时异常,则不应该这样做。

    与方法相关的任何错误 覆盖( - 万一当孩子 类方法与 Base 同名 类和与基类相同的参数 class ---- ) 将在编译时抛出 时间。

    这就是所谓的覆盖。如果它不存在,那么如果你使用@Override

    ,它可能会抛出编译时错误

    【讨论】:

    • 好的,如果我的代码抛出异常,无论如何都与重载无关.. kooll ...我接受.. 我的覆盖问题仍然是我们是否有可能出现运行时异常..跨度>
    【解决方案2】:

    我无法想象方法重载如何导致运行时异常。

    一些不正确/不完整的方法覆盖可能会导致运行时异常的场景:

    1. 基础方法是抽象的,而子类没有实现它 - 当父类重新编译添加新方法时,可能会发生这种情况,而子类没有重新编译(错误的延迟编译,或位于不同 jar 中的类等)
    2. Overriden method is called from the constructor of a base class
    3. 与1相关:基方法不是抽象的,但是签名改变了,而子类没有重新编译。所以它不会导致编译错误,并且会在运行时飞行。

    【讨论】:

    • @Tarlog ..... kool .. 这两种情况确实有意义.. 但是这些编译类型的问题也可能会导致与重载相同的问题..当我在子类中重载时。现在当我更改基类时编译它并且我不编译子类->你说什么?
    • 没有。除非您有抽象方法,否则您不能从父级调用子级的重载方法,但它被称为覆盖。
    • 我不能在子类中重载基类方法吗?
    • 嗯,是的,你可以。假设您有 Base.foo(String) 和 Child.foo(int),因此 Child.foo(int) 被重载。但那又如何呢?如果您将 Base.foo(String) 更改为 Base.foo(int) 它们将被覆盖。如果您更改为其他内容,它们将保持被覆盖......好吧,也许可以考虑一些情况,它会在运行时导致错误......但我现在无法想象。
    • 从技术上讲,重写类方法称为“隐藏”,它与重写实例方法具有不同的语义。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-05
    • 2022-01-10
    • 1970-01-01
    • 2015-03-22
    • 2018-01-15
    相关资源
    最近更新 更多