java 中的继承未检测到来自其他同名包的扩展 class

inheritance in java is not detecting extended class from other package, of same name

我正在使用 Eclipse。

2 个文件夹:src/test 和 src/main

两者都有同名的包:Academy

src/test中的Academy包有一个class名称:Base.java

src/main中的Academy包有一个class名称:HomePage.java

HomePage.javaclass中,extends Base没有检测到其中的碱基class。 这是HomePage.java

里面的代码
package Academy;

import Academy.Base;

public class HomePage extends Base{
}

Academy.BaseBase 上有一条红线。它告诉我们制作 Base class,但它已经在那里了。我试图保存文件。我也尝试制作新项目。请帮忙。谢谢。

参考图片如下:

import 无关紧要。

您的 src/main/java/、src/main/resources/ 是为您的主要产品包装的,可能类似于 E2EProject1.jar。

你的 src/test/java/, src/test/resources/ 被打包在你的单元测试中,可能类似于 E2EProject1-test.jar。这些测试 classes 保留在您的主要产品之外,但是 class 路径上的主要产品作为依赖项。

所以它应该是这样的:

  • src/main/java/Base.java
  • src/test/resources/data.properties(或src/main/resources/)

包命名相同是为了能够测试(隐式导入)non-public,包私有 classes of src/main/java in unit test classes在 src/test/java.

您正在使用 Maven 作为 Eclipse 项目的构建系统。

Maven 不允许主树中的 class 依赖于测试树中的 class。它通过告诉 Java 编译器和运行时测试树中的 classes 和资源不在主代码的构建时间和运行时 class 路径中来防止这种情况发生。这就是您收到编译错误的原因。

解决方案:

Base.java class 移至“src/main/java/Academy”目录。


您发表评论:

It's just 2 packages with same name, inside 2 different folders. whether it's test or not, it should still inherit with extends.

对不起...但你错了。 将 classes 放在哪棵树中很重要。这是一个 Maven 项目,Maven 对这些事情“有意见”。有充分的理由,海事组织。但无论哪种方式,Maven 的意见都优先……如果您选择使用 Maven。


还有一些其他问题:

  1. 包名称应以小写字母开头。例如阅读this

    解决方案:将 Academy 重命名为 academy1.

  2. Non-code 资源不应位于“java”目录中。 Non-code “java”源目录中的资源不会在运行时 classpath ... 中,也不会包含在(常规)JAR 文件中。

    解决方案:创建一个“resources”目录并将其放在那里。

  3. import Academy.Base;是多余的。没有必要在同一个包中导入class。


1 - 替代解决方案:不要要求其他人处理您的代码,或帮助您完成它。如果其他人永远 不需要阅读您的代码,那么您只关心代码的外观。编译器不在乎。只有人类会。

按照以下步骤解决了上述错误:

右键项目->构建路径->配置构建路径->源选项卡

然后在你的项目下搜索tab搜索src/main/java

并将“包含测试源”从“否”更改为“是” 并应用更改