用私有构造函数扩展类

时间:2020-07-01 06:11:30

标签: java constructor private extends

是否可以使用不可见的构造函数扩展类,而不必知道该构造函数的作用并再次实现它?

import java.sql.DriverManager;
    
public class myDriverManager extends DriverManager {
    public myDriverManager() {
        super(); //Fehler: the constructor DriverManager() ist not visible
    }
    
}

2 个答案:

答案 0 :(得分:4)

您不能扩展DriverManager,但是可以实现DataSource

注意:JDBC 2.0 API中新增的DataSource接口提供了另一种连接数据源的方法。使用DataSource对象是连接到数据源的首选方法。

答案 1 :(得分:2)

每个构造函数的第一行要么是对其父类构造函数的调用,要么是对任何当前类构造函数的调用,因此,即使您不保留它,编译器也会将super();保留为第一行。

现在进入DriverManager的唯一构造函数是private,当您将其扩展到类时,其构造函数将尝试按照上述逻辑调用DriverManager的构造函数,并给出编译时错误,因为它是私有的并且变得不可见。

即使不声明没有构造函数的类,情况也将相同

public class myDriverManager extends DriverManager {
    
}

这也会产生相同的错误,因为编译器将创建一个默认的构造函数,并且默认情况下,其第一行将为super();,再次根据上述逻辑,构造函数将再次不可见。

所以基本上发生的事情是,当您扩展DriverManager时,您的类必须在其代码的某些部分调用super();,并产生编译时错误,因此DriverManager无法扩展为任何课。

相关问题