是否有可能在java中没有方法的接口

时间:2013-11-04 18:17:16

标签: java

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

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();

        }
}

5 个答案:

答案 0 :(得分:5)

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

引用Wikipedia page on marker interfaces

  

典型的接口指定功能(以。的形式)   方法声明)实现类必须支持一个标记   界面不需要这样做。仅存在这样的界面   表示实现类的特定行为。

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

class B implements A{
    public B() {
         System.out.print("I am in B and x is"+x);
    }
}

答案 1 :(得分:1)

是。 java.io.Serializable接口是此类标记接口的示例

答案 2 :(得分:0)

根据java语言规范

  

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

它没有说你必须这样,你可以有空接口

从上面的答案中有空接口

答案 3 :(得分: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的一个非常基本的概念,虽然起初可能会令人困惑。

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

答案 4 :(得分:0)

没有方法的界面称为标记界面

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

示例:Portraitjava.io.Serializable