我开始学习OOP和继承的原理,在写一些代码时遇到了这个问题:
Suppose there is a package which contains a class called ClassA. Then, in a separate folder, I have another class called MyClass. Inside the same folder as MyClass, I have another class called ClassA, which is unrelated to the ClassA in the package. When I write the code for MyClass, I make it extend ClassA.
Which ClassA does MyClass extend from? Does MyClass inherit the ClassA which is in the imported package, or does MyClass inherit the ClassA which is in the same folder as MyClass? Would the code even compile?
在深入示例之前,我试图从理论角度理解这一点。
最佳答案
您所看到的是一种静态作用域语言,它将从其内部作用域一直工作到其外部作用域。 在这种情况下,由于 import Class A 是直接在首次调用它的文件内声明的,因此它将使用 import Class A 并停止。这将是其默认行为。 它不会继续查看打包的 Class A,因为它已经找到了一个,在同一个类文件中声明。
这是 java 的(静态)作用域层次结构的默认行为。
如果它没有找到在同一文件中导入的 A 类的导入,它将访问其包来搜索。
这在声明类似变量时非常有用。稍微研究一下静态作用域语言的工作原理。
如果您更容易理解,您可以通过准确声明您想要哪个 A 类来明确您的意图。
只是一个旁注 - 这更像是一个编程语言问题,而不是直接的 java 问题,但由于您专门询问 java,所以我们只需要涵盖简单的具体答案。如果您想了解更多信息,我可以指导您(或告诉您)更多有关静态与动态作用域语言的信息。
我认为值得注意的是,如果您决定从包中导入两个 Class As(您不需要这样做),则必须明确声明您想要哪个。
关于java - Java 如何知道在此示例中使用哪个类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44957139/