2

我是java新手并试图理解接口。制作没有方法的接口会产生编译时错误。这种行为的原因是什么?

import java.io.*;
interface A{
int x=10;

}
class B implements A{


    System.out.print("i am in B and x is"+x);


}
class InterfaceEx{
    public static void main(String[] args) {
        A a;
        a=new B();

        }
}
4

5 回答 5

5

是的,在 Java 中可以有一个没有方法的接口。事实上,SerializableandCloneable接口是 Java 内置的,没有任何方法。它们被称为“标记”接口。

从标记界面上的维基百科页面引用:

典型的接口指定了实现类必须支持的功能(以方法声明的形式),而标记接口则不需要这样做。这种接口的存在表明了实现类的特定行为。

至于为什么你的B接口没有编译(现在你已经提供了代码),你需要将你的语句放在一个方法或构造函数中,例如:

class B implements A{
    public B() {
         System.out.print("I am in B and x is"+x);
    }
}
于 2013-11-04T18:19:41.747 回答
1

是的。java.io.Serializable接口就是这种标记接口的例子

于 2013-11-04T18:23:15.873 回答
0

根据java语言规范

接口的主体可以声明接口的成员,即字段(§9.3)、方法(§9.4)、类(§9.5)和接口(§9.5)。

它并没有说你必须,所以是的,你可以有空的接口

从上面的答案有空接口

于 2013-11-04T18:23:28.970 回答
0
class B implements A{


    System.out.print("i am in B and x is"+x);


}

这不是合法的语法。一个类定义只能有变量或方法;就是这样。那里的代码本身并不是变量或方法的定义,因此编译器不知道该怎么做。

如果你定义了一个方法,那么这个方法里面可以有任何指令。

class B implements A{

    public void myMethod(){

        System.out.print("i am in B and x is"+x);

    }


}

您似乎不了解什么是类,它是 OOP 和 Java 的一个非常基本的概念,尽管一开始可能会令人困惑。

另外,请注意您的错误。一个错误与另一个非常不同。您认为此错误是由于接口为空所致;那是错误的。这是一个语法错误。如果您阅读了编译器输出,它就会告诉您这一点。它试图帮助你。

于 2013-11-04T18:28:49.527 回答
0

没有方法的接口称为标记接口

标记接口用作标记,将消息通知给 java 编译器,以便它可以向实现它的类添加特殊行为。

示例:java.io.Serializable,Cloneable

于 2017-06-11T04:45:24.617 回答