为什么Java的接口不能定义构造函数?
巴扎黑
巴扎黑 2017-04-18 09:55:22
0
12
1161

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

巴扎黑
巴扎黑

Antworte allen(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,那就和抽象类定位差不多了。

Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage