“method does not override or implement a method from a supertype” при существующем методе в родительском классе

131
29 апреля 2021, 17:30

Есть класс, который наследуется от org.junit.Assert:

import org.junit.Assert;
public class CustomAssert extends Assert {
    @Override
    static public void assertTrue(String message, boolean condition) {
        System.out.println("Test");
    }
}

Хочу переопределить метод родительского класса

static public void assertTrue(String message, boolean condition) 

Но когда ставлю над ним аннотацию @Override, получаю ошибку: Error:(7, 5) java: method does not override or implement a method from a supertype

Подскажите пожалуйста, в чем проблема, ведь в родительском классе есть метод с таким же именем и с точно такой же сигнатурой (я его скопировал из родительского)?

Кусок кода из родительского класса:

public class Assert {
    protected Assert() {
    }

    static public void assertTrue(String message, boolean condition) {
        if (!condition) {
            fail(message);
        }
    }
.......
}
Answer 1

Потому что в суперклассе переопределяемый метод - static. Static методы нельзя переопределять. Их можно "перекрыть" (не указывать аннотацию @Override), но тогда полиморфное использование методов при наследовании будет недоступно. И это будет не переопределение, это будет - перекрытие.

Приведу пример для ясности

  1. Перекрытие

    public class Main {
        public static void main(String[] args) {
            A a = new A();
            A b = new B();
            a.doSomething(a);
            b.doSomething(b);
        }
    }
    class A {
        public static A doSomething(A a) {
            System.out.println("A");
            return a;
        }
    }
    class B extends A {
        public static A doSomething(A a) {
            System.out.println("B");
            return a;
        }
    }
    
    * Output: A A
    
  2. Переопределение

    public class Main {
        public static void main(String[] args) {
            A a = new A();
            A b = new B();
            a.doSomething(a);
            b.doSomething(b);
        }
    }
    class A {
        public A doSomething(A a) {
            System.out.println("A");
            return a;
        }
    }
    class B extends A {
        @Override
        public  A doSomething(A a) {
            System.out.println("B");
            return a;
        }
    }
    * Output: A B
    
READ ALSO
Авто логин в приложении android

Авто логин в приложении android

Нужно сделать авто логин в приложенииСоздано оно на Android Studio и авторизация на Firebase

89
Yaw Pitch Length преобразовать в XYZ

Yaw Pitch Length преобразовать в XYZ

У меня есть 3д вектор который хранит в себе Yaw, Pitch, Length

262
Почему у меня тормозит отрисовка большого количества объектов opengl на телефоне?

Почему у меня тормозит отрисовка большого количества объектов opengl на телефоне?

При отрисовке 3000 вершин телефон уже начинает тормозить

106