【问题标题】:creating an interface and implement it in another package创建一个接口并在另一个包中实现它
【发布时间】:2020-02-28 15:32:47
【问题描述】:

在自己的包中创建一个包含三个方法的接口。 在不同的包中实现接口。证明所有 接口中的方法自动公开。

这是我作为作业得到的上述问题,我可以从任何地方获得帮助。 我试过的是:

文件 01:Student.java

package student;
public interface Students
{
    void RollNo();
    void course();
    void marks();
}

文件 02:MyMain.java

import student.*;
class Test1 implements Students
{
    void RollNo()
    {
        System.out.println("18CS35");
    }
    void course()
    {
        System.out.println("OOP");
    }
    void marks()
    {
        System.out.println("85");
    }
}
class MyMain
{
    public static void main(String[] args)
    {
        Test1 t = new Test1();
        t.RollNo();
        t.course();
        t.marks();
    }
}

我所做的是,编译文件 01 并创建了一个包(同一目录中的文件夹) 当我编译文件 02 时,我得到了这个错误。

MyMain.java:2:错误:无法访问Students class Test1 implements Students ^ 坏类文件:.\Students.class 类文件包含错误的类:student.Students 请删除或确保它出现在类路径的正确子目录中。

我用来编译的命令:

javac –d . Student.java
javac Student.java      
javac MyMain.java

【问题讨论】:

  • 可能是一个搞砸的类路径。请edit您的问题包括您用于编译的exact命令。
  • 子类中的方法不能有更多限制
  • 您使用的是什么 IDE?我建议选择一个智能 Java IDE,这样你就不会遇到这个任务的问题了 :)
  • 如果您在文件 01 中添加您的包,请在文件 02 中也这样做。
  • 也许您需要为您的包创建一个名为 student 的文件夹,并将 Student.java/Student.class 放入该 student 文件夹中。这也可能适用于您的 MyMain.java/class。

标签: java oop interface


【解决方案1】:

在学生包中声明接口:

package student;

public interface Student {
    void rollNo();

    void course();

    void marks();
}

然后在另一个包中,声明你的 MyMain 类

package anotherpackage;

import student.Student;

public class MyMain {

    public static void main(String[] args) {
        Test1 t = new Test1();
        t.rollNo();
        t.course();
        t.marks();
    }
}

class Test1 implements Student {
    @Override
    public void rollNo() {
        System.out.println("18CS35");
    }

    @Override
    public void course() {
        System.out.println("OOP");
    }

    @Override
    public void marks() {
        System.out.println("85");
    }
}

  • 文件名为MyMain.javaMyMain 类必须在其中声明为public这很重要。文件中必须有一个且只有一个与文件同名的公共类。

  • 另一方面,
  • Test1 未声明为公开。

  • 您不必添加 @Override 注释,但最好在实现或覆盖方法时始终添加它们;

让它工作:

  • Student.java 粘贴到名为student 的目录中
  • MyMain.java 粘贴到名为anotherpackage 的目录中

然后编译

javac student/Student.java
javac anotherpackage/MyMain.java

然后运行:

java anotherpackage/MyMain

输出:

18CS35
OOP
85

证明:

注意,当你实现你的方法时,你需要将它们声明为public,否则编译器会抱怨你降低了它们的可见性。这证明它们在界面中被认为是公开的。

【讨论】:

  • 谢谢,但是我的文件目录还是有问题,你能用我的电脑远程帮助我吗? PS:我是java初学者
  • @VishwasLuhana 目录与包名称相同,请确保您没有在目录或包名称中打错字。
【解决方案2】:

默认情况下,您的接口方法是公开的(接口方法始终是公开的)。您的实现方法具有默认可见性。实现的可见性不能低于它正在实现的接口或抽象方法。

只需在 Student-class public 中声明您的方法。

【讨论】:

  • 谢谢,在成功编译公共程序后,但现在这是错误错误:无法找到或加载主类 MyMain 原因:java.lang.NoClassDefFoundError:学生/MyMain(错误名称:MyMain)
【解决方案3】:

根据您用于编译代码的命令,您似乎已将Students.javaMyMain.java 放在同一个目录中。由于Students 应该在一个名为student 的包中,所以你的目录结构应该如下所示,因为Java 根据包名在目录中查找.class 文件。

student/
    Students.java
    Students.class
MyMain.java
MyMain.class

或者,如果您有单独的源目录和构建目录:

src/
    student/
        Students.java
    MyMain.java
build/
    student/
        Students.class
    MyMain.class

如果您使用 Eclipse、Netbeans 或 IntelliJ IDEA 等 IDE,所有这些都应该自动处理。

【讨论】:

    猜你喜欢
    • 2020-11-21
    • 2016-02-07
    • 2014-09-16
    • 1970-01-01
    • 2012-05-16
    • 2011-04-24
    • 2017-11-02
    • 1970-01-01
    • 2023-01-28
    相关资源
    最近更新 更多