实例化Java抽象类?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (96)

相对较新的Java程序员和我被教导你不能创建一个抽象类的实例。我也做了一些小小的研究,我发现在大多数情况下,当它出现一个抽象类时,它实际上是一个匿名的子类。但这是我遇到的问题:

Java的URL类有一个openConnection返回a 的方法URLConnectionURLConnection是一个抽象类,Java文档也将其所有子类都列为抽象类.....所以我真的迷失了。什么是返回?

提问于
用户回答回答于

openConnection返回一些扩展的具体类URLConnection。该方法的签名被定义为返回,URLConnection因为使用它的代码不应该依赖任何特定的实现。

用户回答回答于

例如,返回的是非抽象的子类,在API文档中找不到它sun.net.www.protocol.http.HttpUrlConnection。如果您在浏览器中从applet运行相同的代码,您可能会得到一个不同的代码,通常是包装浏览器本地连接的东西。

所以这里没有任何技巧也没有什么魔法,只是有些类不会显示在API文档中,因为它们被认为是实现的内部特征,可能会发生变化。

有很多类似的例子,DocumentBuilderFactory或者TransformerFactory都是抽象的,但是他们的newInstance()方法将返回一个子类,通常单独打包(例如Saxon)。

但是同样的问题也有不同的解决方案:JDBC定义了Driver接口(而不是抽象类)和一个DriverManager带有静态方法的实用程序类来加载不同的驱动程序实现。数据库驱动程序供应商不需要扩展抽象类,而是需要实现Driver接口。

顺便说一句,要找到对象的实际运行时类,只需调用getClass()它们即可。

扫码关注云+社区

领取腾讯云代金券