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。编译器现在很高兴。