Java 实现也被重写的方法

Java 实现也被重写的方法,java,methods,extends,implements,Java,Methods,Extends,Implements,我正在将spring security添加到我的应用程序中,遇到了一个问题。我的UserDetails实现了org.springframework.security.core.UserDetails.UserDetails,但也扩展了我的User实体类。它们都有一个getPassword()方法,spring安全接口的方法返回一个String,我的方法返回一个字节数组,因为密码是加密的 我希望我的实现实现接口的方法,而不是重写实体类的方法,但Netbeans不断给出返回类型无效的错误。我希望避免

我正在将
spring security
添加到我的应用程序中,遇到了一个问题。我的
UserDetails
实现了
org.springframework.security.core.UserDetails.UserDetails
,但也扩展了我的
User
实体类。它们都有一个
getPassword()
方法,spring安全接口的方法返回一个
String
,我的方法返回一个字节数组,因为密码是加密的

我希望我的实现实现接口的方法,而不是重写实体类的方法,但Netbeans不断给出返回类型无效的错误。我希望避免重命名我的
getPassword()
方法来解决此问题

有没有办法告诉编译器实现接口的方法而不是重写超类


谢谢

您不能这样做,返回类型不能是两个完全相同的Java方法签名之间的唯一区别

最简单的修复方法是将
User
声明为字段,而不是扩展它:

public class MyUserDetails implements UserDetails {

  private final User user;

}

重载时不考虑返回类型,所以本质上不能这样做。我只需重命名我的实现

这可能根本不是一个选项,如果您确实需要继承所有
User
properties,我确实需要继承用户的属性。我将实体类的方法重命名为getEncryptedPassword,因为它实际返回的是getEncryptedPassword。编译器现在很高兴。