【问题标题】:Not able to create instance of interface but an object无法创建接口实例但无法创建对象
【发布时间】:2014-02-19 15:09:05
【问题描述】:

在 java 中,我们无法创建这样的接口实例:

iJack obj = new iJack();    //iJack is an interface

但是,我注意到我们可以这样做:

iJack obj;

两者有什么区别?

除此之外,我注意到您可以在接口中嵌套一个类,这有什么用?我想不出有什么实际用途。这是我所说的一个例子:

public interface iJack {
    public abstract class Jack_class {

    }
}

【问题讨论】:

  • 请对类/接口使用正确的 Java 命名约定(以大写字母开头,无下划线,仅使用 CamelCase)。
  • 为什么这篇文章被标记到Android??
  • 您有 C/C++ 背景吗? Java只有对对象的引用,它从不在堆栈上声明和对象。 iJack obj; 声明了一个未初始化的引用 obj,它在堆栈上实例化 iJack 的实例。
  • 在接口中嵌套一个类只是词法范围的事情。如果类与接口中的方法有密切关联,这将很有用。与public static嵌套在另一个类中的类基本相同。

标签: java android


【解决方案1】:

接口不能被实例化。只有类可以。但是,您可以(并且应该)使用接口作为变量的类型。

你的线路...

iJack obj;

...声明一个 iJack 类型的变量,但它没有初始化它。

顺便说一句,您应该始终在接口名称的开头使用大写字母。

【讨论】:

  • 感谢信息 - 但是在接口中嵌套类的目的是什么?
  • 不要使用它。几乎所有阅读它的人都会感到非常困惑。
【解决方案2】:

如果你定义了一个类型为接口的引用变量,你分配给它的任何对象都必须是实现该接口的类的实例。

你问两者有什么区别。第一个是错误的。您不能实例化接口,但可以实例化实现这些接口的类。所以你不能谈论差异

参考:Using an Interface as a Type

在接口中使用嵌套类与在另一个类中使用嵌套类具有相同的目的。那就是将类的范围限定为接口。

参考:Nested class inside an interface

【讨论】:

  • 将类限定为接口有什么好处?
  • 这是一种对只在一个地方使用的类进行逻辑分组的方法先阅读oracle java教程
猜你喜欢
  • 2012-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多