实现接口的类有更多的方法

Sam*_*Sam 2 java design-patterns

我有一个界面:

public interface IUser {
   public boolean login();
}
Run Code Online (Sandbox Code Playgroud)

以及两个实现该接口的类:

public class UserA implements IUser{

   public boolean login() {
       System.out.println("login");
   }

  public void update() {
      System.out.println("update");
  }
}


public class UserB implements IUser {

   public boolean login() {
       System.out.println("login");
   }

   public void delete() {
       System.out.println("delete");
   }
}
Run Code Online (Sandbox Code Playgroud)

我的问题是如果我创建一个用户:

IUser user = new UserA();
Run Code Online (Sandbox Code Playgroud)

用户对象无权访问update()但建议使用接口创建对象,我想知道是否有可以使用的最佳实践或设计模式(而不是强制转换)?

Thi*_*ilo 5

“向接口编码”是一个很好的做法。

但是,只有当该接口具有您需要的所有方法时,这才有效。

如果没有,您需要使用具体类而不是接口(这不一定是坏事,这取决于情况),或者重新考虑如何设计接口。

  • @Mustafasabir:是的,选角是设计问题的标志。如果某个方法采用 IUser 作为参数,但每次 IUser 不是 UserA 时都会失败并出现 ClassCastException,则该方法应采用 UserA 作为参数。 (2认同)