Абстрактные методы не реализованы, ошибка не выбрасывается

1

Так что я просто пытался изучить java, исходящую из фона C++, как часть быстрого разгона. Я только что реализовал базовый класс из абстрактного класса, как показано ниже

abstract class my_abstract_class
{
    abstract void my_abstract_function();
}

class my_concrete_class extends my_abstract_class
{

}

public class ConcreteClasses {

    public static void main(String args[])
    {
        my_concrete_class my_concrete_class = new my_concrete_class();

    }

Это проходит, хотя мой конкретный класс не реализует абстрактный метод и не является абстрактным классом. Не следует ли выбросить ошибку компиляции? Или я пропустил что-то очень основное здесь

PS: ошибка показана eclipse как часть статического анализа, но мне все еще интересно, как эта программа компилируется и запускается без каких-либо проблем

Теги:
inheritance
abstract-class

1 ответ

3
Лучший ответ

Компилятор Eclipse немного особенный. Если код не компилируется, он генерирует сообщения об ошибках, но все же компилирует классы, создавая фиктивные методы, бросая исключения.

Если вы запускаете проект с ошибками компиляции, он предупреждает вас, что вы не должны этого делать, но вы все равно можете продолжить.

Просто не делайте этого и не игнорируйте сообщения об ошибках компилятора.

  • 1
    Если вы запустите свой код вне Eclipse, используя javac из командной строки, вы получите ошибку компиляции.
  • 0
    @ Конец, Интересно! Немного странно, что вы можете просто проигнорировать ошибку затмения и запустить программу. Разве двоичный файл не должен создаваться при ошибках компиляции?
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню