java - 接口(interface) : Java Language Specification

标签 java class object interface abstract

JLS Java SE 7 : 9.2 请解释一下:

  1. 第三点
  2. 第 5 行(粗体)
  3. 倒数第二行

最佳答案

Every class in Java is implicitly (or explicitly) a sub type of java.lang.Object .

The class Object is a superclass (§8.1.4) of all other classes.

因此,您可以调用 Object 中声明的任何方法任何类类型的任何变量。

String var = ...;
var.hashCode();

这对于 interface 来说必须是正确的。也可以输入变量

SomeInterface var = ...;
var.hashCode();

因此,interface必须隐式声明(如 abstract )那些在 java.lang.Object 中声明的方法.

您无法覆盖 final方法,但接口(interface)声明的方法必须在子类型中实现,因此如果接口(interface)声明的方法声明为final,则会抛出编译时错误在java.lang.Object .

接口(interface)可以在其主体中声明类、接口(interface)和字段。如果子接口(interface)声明了任何具有相同名称的接口(interface),那么它就会隐藏它们。因此它不会继承它们。

例如,

public static void main(String[] args) throws Exception {
    System.out.println(Parent.answer);
    System.out.println(Child.answer);
}

interface Parent {
    int answer = 42;
}

interface Child extends Parent {
    int answer = 0;
}

打印

42
0

没有办法获取Parent的值来自 Child引用。

关于java - 接口(interface) : Java Language Specification,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21486131/

相关文章:

javascript - Array.prototype.map() 返回空项,但 Array.prototype.forEach() 不会

java - Wildfly:如果我调用我的 Web 应用程序,为什么我只得到 "Forbidden"?

java - 为什么此 XML 会产生 "...must be well-formed"验证错误?

java - AsyncTask 不显示 onPreExecute

c++ - 使用 push_back 在类中填充结构的值

java - 链接到开始按钮的类不会运行

java - 需要在 GridView 项目上点击两次

javascript - 为什么我的 javascript 类实例中的方法看不到属性

Javascript 对象赋值无限递归

java - 从数组内的类调用方法