我知道有人问过这个问题,但是没有一个问题适合我的需要。对此感到抱歉。
无论如何,我的class AdvancedSocket extends java.net.Socket
。在我的class AdvancedServerServer extends java.net.ServerSocket
。因此,在AdvancedServerSocket中,我覆盖accept()
方法以返回AdvancedSocket
。这是方法:
@Override
public AdvancedSocket accept() throws IOException {
return (AdvancedSocket) super.accept();
}
但这会引发java.lang.ClassCastException
。
答案 0 :(得分:1)
当您致电super.accept()
时,会执行SocketServer
的{{1}}方法中的代码。该类对您定义的accept()
类一无所知,因此无论它返回什么,它都不是AdvancedSocket
的实例。
如果您想要返回AdvancedSocket
,可以将调用返回的AdvancedSocket
实例转移到Socket
,并从中super.accept()
生成AdvancedSocket
。
我希望有所帮助。
答案 1 :(得分:0)
实际上你的accept方法仍然返回普通的socket(因为你返回super.accept()),你怎么认为它可以被转换?您需要手动转换它(在通常的套接字上构建高级套接字)
答案 2 :(得分:0)
AdvancedServerSocket
不是AdvancedSocket
的类型,因此无法完成。
必须介于两者之间的某个位置,将它们视为合理,因此您应该能够创建一个interface
来定义此功能,并且同时具有两个类implement
。然后,您将能够以相同的通用方式处理它们。