java - 将父类(super class)类型转换为子类类型?

标签 java oop casting

我知道有人就此提出了多个问题,但没有一个符合我的需求。对此深感抱歉。

无论如何,我的类 AdvancedSocket 扩展了 java.net.Socket。在我的类 AdvancedServerServer 中扩展了 java.net.ServerSocket。因此,在 AdvancedServerSocket 中,我重写了 accept() 方法以返回 AdvancedSocket。这是该方法:

@Override
public AdvancedSocket accept() throws IOException {
    return (AdvancedSocket) super.accept();
}

但这会抛出java.lang.ClassCastException

最佳答案

当您调用 super.accept() 时,SocketServeraccept() 方法中的代码将被执行。该类对您定义的 AdvancedSocket 类一无所知,因此无论它返回什么,它都不会是 AdvancedSocket 的实例。

如果您想返回一个 AdvancedSocket,您可以获取调用 super.accept() 返回的 Socket 实例并进行一个 AdvancedSocket

希望对您有所帮助。

关于java - 将父类(super class)类型转换为子类类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30720255/

相关文章:

java - 高级和低级 Java API 之间有什么区别?

c++ - 在 C++ 2017 中将 const 转换为非常量指针并对其进行修改时,编译器将这两个值存储在哪里?

php - 将 String 与 Integer 进行比较会得出奇怪的结果

c# - 将 Collection<T> 转换为接口(interface) - 为什么它不起作用?

java - Jersey 2.x 不支持POJO转json?

java - 使用JAVAFX和SceneBuilder制裁剪体线的动态动画

java - 是否有理由不从 SQLiteOpenHelper DB 类返回 MyClass 的初始化 ArrayList 而不是 Cursor?

oop - 对象上的测试方法存在

java - Java中对象的初始化

python - 内部类作用域的问题