有时候在开发中会遇到方法模版的问题,具体场景为:
1、为了代码质量,会将一个出现较多的代码抽出来,放入抽象父类,然后子类继承父类。
2、但是如果抽出来的方法需要使用到类的变量就会变的麻烦,因为JAVA中方法支持Override,但是变量是不行的,所以如果直接在父类中通过变量名使用变量,那么当我们的子类变量不一样时 ,得到的结果就不是想要的了。
3、既然方法支持Override,那我们可以通过getX()的方法访问变量,然后再子类中重写getX()方法,这样就能打到目的了。
public abstract class AbstractOauthLogin implements OauthLoginInterface {
private String authUrl;
private String clientId;
@Override
public String redirectUrl(String state) {
return getAuthUrl()+getClientId();
}
public String getAuthUrl() {
return authUrl;
}
public String getClientId() {
return clientId;
}
}
public class AmazonOauthLogin extends AbstractOauthLogin {
private String authUrl;
private String clientId;
@Override
public String getAuthUrl() {
return authUrl;
}
@Override
public String getClientId() {
return clientId;
}
}
这样,当调用父类的redirectUrl()方法时 ,实际返回的是子类的authurl+clientid。