Переопределение не работает, хотя методы совпадают - PullRequest
0 голосов
/ 16 июня 2020

Я снова изучаю некоторые OOP концепции, поэтому я сделал этот простой код, чтобы посмотреть, как работают методы переопределения, и удивительно, что он не работает. Кроме того, просто игнорируйте тот факт, что имя класса - HelloWorld, это просто файл для учебных целей. Он уже изменен на Filha. java btw

class HelloWorld {

    public static void imprimir() {
        System.out.println("Oie");
    }//

    public static void imprime(int a) {
        System.out.println("27");
    }//

}//

public class Filha extends HelloWorld {

    public static void main(String[] args) {
        imprimir();
        imprime(55);
    }//

    @Override
    public static void imprimir() {
        System.out.println("Ola");
    }//

    @Override
    public static void imprime(int num) {
        System.out.println(num);
    }//

}// 

Вчера ошибка была Исключение в потоке "main" java .lang.Error: Неразрешенная проблема компиляции в publi c stati c void main (String [] args) { строка, но я выключил свой компьютер, включил его сегодня, и его больше нет.

Теперь ошибка is Метод imprimir () типа Filha должен переопределить или реализовать метод супертипа для строки publi c stati c void imprimir () {. Также есть ошибка в основном методе, где он вызывает imprimir (), как и ожидалось.

Я действительно не знаю, какую еще информацию предоставить, поскольку это простой код с простой проблемой (я считаю), это также мой первый вопрос, поэтому, если я что-то пропущу, спрашивайте, и я отвечу на все вопросы.

Ответы [ 2 ]

1 голос
/ 16 июня 2020

Вам нужно использовать abstract class вместо обычного класса, а в HelloWorld классе вам нужно заменить обычные методы на abstract методы без реализации, а в Filha классе заменить extends на implements и вы успешно сможете @Override функции

Примечание: методы stati c не могут быть переопределены

0 голосов
/ 16 июня 2020

с вашим кодом

class HelloWorld {

    public static void imprimir() {
        System.out.println("Oie");
    }//

    public static void imprime(int a) {
        System.out.println("27");
    }//

}//

public class Filha extends HelloWorld {

    public static void main(String[] args) {
        imprimir();
        imprime(55);
    }//

    @Override
    public static void imprimir() {
        System.out.println("Ola");
    }//

    @Override
    public static void imprime(int num) {
        System.out.println(num);
    }//

}// 

вы ничего не отменяете. Если вы удалите @Override, код будет работать нормально, но покажет только то, что вы объявили в своем основном методе, поскольку методы stati c не могут быть переопределены, как показано ниже:

class HelloWorld {

    public static void imprimir() {
        System.out.println("Oie");
    }//

    public static void imprime(int a) {
        System.out.println("27");
    }//

}//

public class Filha extends HelloWorld {

    public static void main(String[] args) {
        imprimir();
        imprime(55);
    }//

    public static void imprimir() {
        System.out.println("Ola");
    }//

    public static void imprime(int num) {
        System.out.println(num);
    }//

}// 
...