создать интерфейс и реализовать его в другом пакете - PullRequest
0 голосов
/ 28 февраля 2020

Создать интерфейс, содержащий три метода, в своем собственном пакете. Реализуйте интерфейс в другом пакете. Докажите, что все методы интерфейса автоматически публикуются c.

Это вопрос, который я получил в качестве задания, и мне разрешено получать помощь откуда угодно. Я попробовал:

файл 01: студент. 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

Ответы [ 3 ]

1 голос
/ 28 февраля 2020

Объявите интерфейс в пакете студента:

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.java и класс MyMain должен быть объявлен public внутри него. Это важно . У вас должен быть один и только один класс publi c в файле с тем же именем, что и у файла.

  • Test1, с другой стороны, не объявлен publi c.

  • Вам не нужно добавлять аннотации @Override, но рекомендуется всегда добавлять их при реализации или переопределении метода;

Чтобы заставить его работать:

  • stick Student.java в каталоге с именем student
  • stick MyMain.java в каталоге с именем anotherpackage

затем скомпилируйте

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

и запустите:

java anotherpackage/MyMain

вывод:

18CS35
OOP
85

доказательство:

Обратите внимание, что когда вы реализуете свои методы, вам нужно объявить их publi c, иначе компилятор пожалуется, что вы уменьшите их видимость. Это доказывает, что они считаются в интерфейсе publi c.

0 голосов
/ 28 февраля 2020

На основании команд, которые вы используете для компиляции кода, похоже, что вы поместили Students.java и MyMain.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

Все это должно выполняться автоматически, если вы используете IDE, например Eclipse, Netbeans или IntelliJ IDEA.

0 голосов
/ 28 февраля 2020

Методы вашего интерфейса опубликованы c по умолчанию (методы интерфейса всегда публикуются). Методы вашей реализации имеют видимость по умолчанию. Реализация не может иметь более низкую видимость, чем интерфейс или абстрактный метод, который она реализует.

Просто объявите свои методы в публикации Student-class publi c.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...