为什么Java的接口不能定义构造函数?
首先你要明白构造函数的作用,构造函数就是初始化class的属性或者方法,在new的一瞬间自动调用,那么问题来了Java和PHP的接口,都不能new 那么要构造函数干嘛呢?根本就没法调用
因为接口不会有自己的实例的,所以不需要有构造函数。
为什么接口不会有自己的实例?因为接口只是定义一系列抽象的功能,使用接口的时候都是通过实现接口的类的,不会直接去用接口。直接去用,那些函数只是个定义,没法用
当然,在Java 8里面接口定义的函数可以有默认的实现,但还是不能直接用接口去调这种函数。
哎...越是简单的问题越不好回答,只能说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
4 回答1k 阅读✓ 已解决
4 回答1.1k 阅读✓ 已解决
1 回答2.5k 阅读✓ 已解决
2 回答692 阅读✓ 已解决
2 回答1.7k 阅读
2 回答1.6k 阅读
2 回答1.3k 阅读