/ / (Java) Защо се прави тази компилация: тривиалният окончателен клас не прилага абстрактни методи от наследен абстрактен родител - java, компилация

(Java) Защо тази компилация: тривиалната крайна класа не прилага абстрактни методи от наследствения абстрактен родител - java, компилация

Защо се компилира това? (пробвано и под Oracle java 5, и java 6 (да, знам, бавно се адаптирам)

public abstract class BaseClass
{
public abstract void methodA(String abc);

public abstract String methodB(String abc);
}

public final class ConcreteClass
extends BaseClass
{
}

Просто пуснете тези два класа в отделни файлове, извикайте javac на тях и хоп, те компилират. Тъй като абстрактните методи са предназначени да бъдат реализирани от изпълнители, това няма смисъл. Играейки с това малко по-нататък, получавам грешка при компилиране само когато част от кода се опитва да извика непроменения метод.

И така, въпросът ми тук е, знае ли някой ЗАЩО компилаторът позволява това (или защо бихме искали да го направи)?

Допълнителен коментар:

  • Когато направих първоначално тестване, първоначално не бях "тмаркирайте ConcreteClass като окончателен и ми хрумна, че друг клас може да разшири класа и по този начин, компилаторът може да не се оплаче и да приеме, че ще имате някой друг клас по-късно по пътя да се погрижи за него, но маркирането на класа като финал трябва да става ясно, че това не е така.

Отговори:

1 за отговор № 1

Както @Jigar спомена в коментара, трябва да импортирате грешна версия на BaseClass, Когато аз опитах да компилирам кода си, получавам следната грешка:

/Users/ShirishP/Desktop/ConcreteClass.java:1: ConcreteClass is not abstract and does not override abstract method methodB(java.lang.String) in BaseClass
public final class ConcreteClass extends BaseClass
^
1 error

-1 за отговор № 2

Може да не е умишлено. Кодът, който статично се оплаква от абстрактни класове, може да се изпълнява при компилиране на обаждания на методи, а не когато деклариран клас (тъй като извикването на метода е потенциално лоша част, а не декларирането му). Определено е нещо, което биха могли да добавят, но няма да хванат нищо полезно, така че може би са преценили, че не си струва.