在 java 中什么时候可以向下转换?

when downcasting is possible in java?

我在 java 中有一个基本问题。从我的研究中,我发现 java 中不允许向下转换,因为它会在运行时抛出异常,但在某些有限的情况下,例如 Downcasting in Java

但我不明白为什么会出现这种说法 HttpURLConnection connection = (HttpURLConnection) url.openConnection() 没有问题?

(因为openConnection() returns一个URLConnection对象)

具体

对不起,我的英语不好,因为我不是母语人士

因为从 url.openConnection 返回的对象在这里使用 一个 HttpUrlConnection 并且程序员需要访问它的方法,但是它作为一个返回界面,所以 javac 除了界面之外不知道它是什么。

换句话说,程序员破坏了API中的封装设计以访问API隐藏的功能。

URL.openConnection() returns一个URLConnection, which is an abstract class, i.e. the returned object can never really be of type URLConnection, but must be of a class that inherits from URLConnection, such as HttpURLConnection.

正如您链接到的 Whosebug 线程的公认答案所说,

Downcasting is allowed when there is a possibility that it succeeds at run time:

在这种情况下,保证在运行时成功,因为返回的对象不能是抽象的实例class URLConnection作为上面有解释。