gpt4 book ai didi

java - 为什么在方法重写时要引用类型?

转载 作者:行者123 更新时间:2023-12-01 23:56:07 25 4
gpt4 key购买 nike

我了解到,在方法重写的情况下,会检查对象而不是类型

class SuperException extends Exception {}
class SubException extends SuperException {}

class AnotherException extends Exception {}
class YetAnotherException extends Exception {}

class A {
void play() throws SuperException, AnotherException {}
}
class Reduced extends A {
void play() throws SuperException {}
}
class Eliminated extends A {
void play() {}
}
class Narrower extends A {
void play() throws SubException {}
}
class TestPolymorphism {
public static void main(String[] args) {
A obj = new Eliminated();
obj.play(); // Doubt 1
Eliminated eobj = new Eliminated(); // Doubt 2
}
}

疑点1:为什么play()是从A类引用的?

疑点2:为什么编译出错?

最佳答案

  1. obj 是继承自 A 的 Elimination 类型,因此可以由 A 类型的变量引用。

  2. 编译错误在 obj.play() 中,因为你没有捕获它抛出的异常。由于 obj 被声明为 A 类型,编译器希望您处理它可能抛出的 2 种类型的异常。它不知道实际上这些异常永远不会被抛出。如果您将 obj 声明为 Elimination,那么错误就会消失。

关于java - 为什么在方法重写时要引用类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15599192/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com