我是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();
}
}
答案 0 :(得分:5)
是的,可以在Java中使用没有方法的接口。事实上,Serializable
和Cloneable
接口是内置于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编译器,以便它可以向实现它的类添加特殊行为。
示例:Portrait
,java.io.Serializable