为什么Java的接口不能定义构造函数?

为什么Java的接口不能定义构造函数?

阅读 16.1k
12 个回答
非要逼死抽象类不可!

首先你要明白构造函数的作用,构造函数就是初始化class的属性或者方法,在new的一瞬间自动调用,那么问题来了Java和PHP的接口,都不能new 那么要构造函数干嘛呢?根本就没法调用

为什么国王的 是三横一竖?

接口是定义行为的,不是定义生产方式的

你怎么实例化咧?

因为接口不会有自己的实例的,所以不需要有构造函数。

为什么接口不会有自己的实例?因为接口只是定义一系列抽象的功能,使用接口的时候都是通过实现接口的类的,不会直接去用接口。直接去用,那些函数只是个定义,没法用

当然,在Java 8里面接口定义的函数可以有默认的实现,但还是不能直接用接口去调这种函数。

接口不能实例化,如果能new出来那要接口还有什么意义?不过java8之后,接口可以有默认方法,可以直接直接调用

哎...越是简单的问题越不好回答,只能说java语言在设计的时候就把接口定义为一种类需要遵循的规范,是为了弥补单继承的不足而设计的。有本书《程序员的呐喊》,里面作者就喷了java的接口的设计,还写到:“高斯林说过,如果重写设计java语言的话,不会考虑接口这种方式”。

抽象类可以。接口不能定义方法细节,只能定义其一系列行为。

我姑且认为题主想要在接口里使用构造函数,是想在具体实现接口的class里做一些代码复用。

interface I {
  public I() {
    system.out.println("不管你怎么实现,我最牛逼");
  }
}

"代码复用"和"接口实现分离"是有一些冲突的,各个不同的类型就是对利弊的取舍妥协。

  • interface选择了最少的复用、最大的分离

  • 一般类的复用容易,但接口不分离

  • 抽象类介于之间。

如@MaxValue所说,如果interface可以有constructor,那就和抽象类定位差不多了。

从接口的功能来说,他是代表抽象,对问题的定义,不存在实体,自然就不需要构造函数了

因为Java语言规范是这么写的8.8. Constructor Declarations

A constructor is used in the creation of an object that is an instance of a class (§12.5, §15.9).

看到没有instance of a class

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题