foo a;
объявляет полеa
, которая является ссылкой на foo
.
foo a();
- это ошибка в Java. Это метод (метод без тела). В Java такой абстрактный метод должен быть квалифицирован с abstract
ключевого слова:
abstract foo a();
Это объявляет абстрактный метод a
который возвращает foo
ссылку. Каждое определение класса, содержащее абстрактный метод , декларацию должно быть квалифицировано с помощью самого ключевого слова abstract
.В вашем случае объявление класса должно выглядеть следующим образом:
abstract class foo {
Из спецификации языка Java - §8.1.1.1:
Нормальных классов могут иметь абстрактные методы, то есть методы, которые объявлены, но еще не реализованы, только если они являются абстрактными классами. Если нормальный класс, который не является абстрактным, содержит абстрактный метод , тогда возникает ошибка времени компиляции.
Это основной вопрос по java. Попробуйте прочитать учебник по Java (google search "Java Tutorial") для ответа. Это тоже трюк, поскольку в контексте этого класса foo a(); является синтаксической ошибкой в java. – DwB
Это недопустимо C++ ... – jrok
- это Java или C++? –