因为构造方法在语义上不属于对象的行为契约,而是类自身创建实例的机制,接口描述的是"对象能做什么",与"对象如何被创建"无关。

从技术层面看,构造方法不能被继承——它不进入子类的方法表,子类的构造器只是通过 super() 调用父类构造器。接口要求实现类提供方法实现,而构造方法无法被"覆写",把它放进接口没有意义。从设计层面看,接口的调用方不应该关心具体实现类的创建方式:客户端拿到的是接口引用,构造过程由工厂、依赖注入等机制负责。如果接口能约束构造器,就隐式绑定了实例化方式,违背面向接口编程的初衷。

类似的还有静态方法:Java 8 起接口可以有静态方法,但它属于接口自身而非实现类,不参与多态。

实践中"按构造约束"的需求通常用工厂模式或泛型+Supplier<T> 解决。追问方向:抽象类为什么可以有构造器(为子类初始化父类状态)?

(约 310 字)