这是面试中提出的问题。 foo a
和foo a()
在以下编码代码段中表示什么。
class foo
{
foo a;
foo a();
}
foo a和foo a()会做什么?采访者没有提到这是java还是c ++。他们希望我用C ++和Java提供答案。
答案 0 :(得分:13)
在C ++中,第一行是错误(类不能包含自身的实例)。第二行声明了一个按值返回foo
实例的方法。最后还有一个缺少的分号。
在Java中,第一行声明了一个引用foo
的数据成员。第二行是错误,因为该方法必须有一个正文。
总之,它不是两种语言中任何一种语言的有效代码。 : - )
答案 1 :(得分:1)
从语法上讲,它在Java方面是不正确的。其他人解释说。
假设它是伪代码,我想,基本答案可能是:
foo a;
是a
类型foo
的变量。
foo a();
是一个名为a
的方法,它返回foo
类型的对象。
答案 2 :(得分:1)
foo a;
声明字段 a
,它是对foo
的引用。
foo a();
是Java中的错误。这是方法声明(没有正文的方法)。在Java中,这种抽象方法必须使用abstract
关键字限定:
abstract foo a();
这声明了一个 abstract 方法a
,它返回foo
引用。包含抽象方法声明的每个类定义必须使用abstract
关键字本身进行限定。在您的情况下,类声明应如下所示:
abstract class foo {
来自Java语言规范 - §8.1.1.1:
普通类可能有抽象方法,即 声明但尚未实现的方法,只有它们是 抽象类。如果非抽象的普通类包含 抽象方法,然后发生编译时错误。
答案 3 :(得分:0)
它的一个方法将返回类型foo,因为类不是抽象编译器会抛出错误
答案 4 :(得分:0)
For Java
class foo
{
foo a;
foo a();
}
第一行声明对名为“a”的“foo”对象的引用。该值将为null。
第二行是错误。它试图声明一个名为“a”的方法,它返回一个“foo”,但该方法没有实体。需要将类和方法声明为abstract才能使其工作,或者“a”方法必须被赋予一个主体。