是否可以使用不可见的构造函数扩展类,而不必知道该构造函数的作用并再次实现它?
import java.sql.DriverManager;
public class myDriverManager extends DriverManager {
public myDriverManager() {
super(); //Fehler: the constructor DriverManager() ist not visible
}
}
答案 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
无法扩展为任何课。