以下接口和类已成功编译。 问题在下面的输出中提到:
interface MyInterface{}
class MyClass implements MyInterface{}
class InterDoubt{
static MyInterface mi ;//= new MyClass() ;
public static void main(String[] args){
System.out.println("X") ;
try{
synchronized(mi){
try{
mi.wait(4000) ;
}
catch(InterruptedException ie){
System.out.println("Exception occured at main.") ;
}
}
}
catch(Exception e){
System.out.println("voilla, MyInterface is an interface,\n" +
"then why compiler allows compilation of\n" +
"mi.getClass(), mi.wait().\n" +
"Or how the methods of Object class are available in an interface."
);
}
System.out.println("Y") ;
}
}
输出:
X
瞧,MyInterface是一个接口,
那为什么编译器允许编译
mi.getClass(),mi.wait()。
或如何在接口中使用Object类的方法。
ÿ
编辑 :-我接受拒绝的答案,因为这是最具解释性的。但是在阅读了答案之后,又出现了一个问题:-
“ 请记住,如果接口试图在Object类中声明一个声明为’final’的公共实例方法,那么它将导致编译时错误。例如,’public final
Class getClass()’是一个声明为’最终”在Object类中,因此,如果接口尝试使用此签名声明方法,则编译将失败
(引自解释)。
那么为什么下面的代码被成功编译:-
interface MyInter{
public void method() ;
}
class MyClass implements MyInter{
public final void method() {
.......
.......
.......
}
}
Java语言规范中指定了您正确指出的异常。接口将自动从类java.lang.Object中获取所有成员。从这里:
Java语言规范明确指出,接口的成员是在接口中声明的成员和从直接超级接口继承的成员。如果接口没有直接的超级接口,则该接口会隐式声明一个与Object类中声明的每个公共实例方法相对应的公共抽象成员方法,除非具有相同签名,相同返回类型和兼容throws子句的方法由以下方式显式声明:该界面。这就是使Object方法的签名可供编译器使用的原因,并且代码编译时没有任何错误。请记住,如果接口试图在Object类中声明一个声明为“
final”的公共实例方法,那么它将导致编译时错误。例如,“ public final Class getClass()”
我知道这是一个很基本的问题,但一个面试官用一种很诡计的方式问我,我很无奈:( 我只知道一个界面的材料或理论定义,并在我工作的许多项目中实现了它。但我真的不明白这为什么有用,怎么有用。 接口方面有一点我也不懂。例如,我们使用 finally块中的。但我没有看到该类实现或继承接口()类,我的意思是。我想知道怎么才能直接调用方法名。同样,我不理解Dispose方法是如何工作的,因为我们需要用我们自己的实
我是大学里的一个新手Java程序员。今天我发现了一些东西,打破了我关于Java语法如何工作的一个概念。 在ArrayList类中找不到方法stream(),但它可能看起来好像在那里。当我将鼠标移到Eclipse中的-方法上时,它表示这是集合的一部分,但我在其在线文档中的任何地方都找不到方法。 如果方法不是我调用它的类的一部分,为什么它可以调用它?
问题内容: 我多次听说,在实例化对象时应该执行以下操作: “接口”名称=新的“类”(); 例如,针对实现的类链表: 实现许多接口,包括队列,双端队列等。上面的代码和 要么 为什么必须同时指定两次类型?似乎多余,但oracledocs似乎没有提及。 问题答案: 在Java 7中是多余的。可以将其重写为。 你想写类似的原因: 如果您改变主意,则可以为您提供以后更改数据收集的自由。这样,您的代码将更加灵
问题内容: 我最近参加了一次采访,他们问我一个问题:“为什么接口比抽象类更受青睐?” 我尝试给出一些答案,例如: 我们只能获得一种扩展功能 他们是100%抽象 实现不是硬编码的 他们要求我使用您使用的任何JDBC API。“它们为什么是接口?”。 我可以为此得到更好的答案吗? 问题答案: 该面试问题反映出提出该问题的人的某种信念。我相信这个人是错的,因此您可以选择两个方向之一。 给他们他们想要的答
问题内容: 今天,我使用了Eclipse的“拉接口”重构功能来创建基于现有类的接口。该对话框提供了将新界面的所有新方法创建为“抽象”方法的功能。 那会有什么好处? 我认为,允许您将接口方法声明为抽象的事实是该语言的多余且无害的功能,因此不建议特别提倡。 为什么Eclipse支持这种样式,或者为什么有人自愿选择支持这种样式? 澄清:我不是在问为什么接口方法是抽象的,这是显而易见的。我想问为什么人们会
我真的很想理解这些的实时使用是什么: 1.Java概念“超类变量可以引用子类对象”有什么用处?即使这样,SuperClass变量只能用于访问由SuperClass定义的对象的那些部分,而不能访问子类成员,这甚至可以由子类对象实现。 2.动态方法调度的需求是什么?下面我有一个例子: 提前谢了。