如何从子类访问父类的方法?以下是我的课程实现:
public interface BaseUrl {
public String getNameSpace();
public String getUrl();
}
BaseSoapUrl类:
public class BaseSoapUrl implements BaseUrl {
@Override
public String getNameSpace() {
return "https://host.com/AndroidWFC/";
}
@Override
public String getUrl() {
return "https://host.com/AndroidWFC/MobileWS.asmx";
}
}
SoapURL界面:
public interface SoapURL {
public String getSoapAction();
public String getMethodName();
}
LoginSoap类:
public class LoginSoap extends BaseSoapUrl implements SoapURL {
@Override
public String getSoapAction() {
return "https://host.com/AndroidWFC/UserControl";
}
@Override
public String getMethodName() {
return "UserControl";
}
}
为了简化代码,我想像这样实现它们。早些时候它就像下面这样:
public interface SoapURL {
public String getNameSpace();
public String getUrl();
public String getSoapAction();
public String getMethodName();
}
LoginSoap类:
public class LoginSoap implements SoapURL {
@Override
public String getNameSpace() {
return "https://host.com/AndroidWFC/";
}
@Override
public String getUrl() {
return "https://host.com/AndroidWFC/MobileWS.asmx";
}
@Override
public String getSoapAction() {
return "https://host.com/AndroidWFC/UserControl";
}
@Override
public String getMethodName() {
return "UserControl";
}
}
我可以访问以下方法:
private SoapURL soapURL = new LoginSoap();
String static final url = soapURL.getUrl();
现在,public String getNameSpace();
和public String getUrl();
的返回值在所有子类中都是相同的;那么为什么要一次又一次地编写代码呢。由于正在使用Web服务,因此将会有许多类将实现SoapURL接口。
所以我的问题是如何访问BaseSoapUrl
到soapURL
中的方法?
答案 0 :(得分:3)
您可以将SoapURL
界面重新定义为abstract class
,您可以在其中提供getNameSpace()
和getUrl()
方法的一些常见实现和< / strong>将其他人保留为abstract
个,以便子类将被迫为他们提供实现。
public abstract class SoapURL {
public String getNameSpace() {
return "https://host.com/AndroidWFC/";
}
public String getUrl() {
return "https://host.com/AndroidWFC/MobileWS.asmx";
}
public abstract String getSoapAction();
public abstract String getMethodName();
}
答案 1 :(得分:0)
我认为你的重构不正确。如果您认为SoapUrl必须具有getNameSpace(),则在接口中定义getNameSpace()方法。 如果您的重构的目的是始终为某些SoapUrl方法返回相同的值,我建议您遵循以下组织:
public interface SoapUrl {
String getNameSpace();
String getUrl();
String getSoapAction();
String getMethodName();
}
public abstract class BaseSoapUrl implements SoapUrl {
@Override
public String getNameSpace() {
return "https://host.com/AndroidWFC/";
}
@Override
public String getUrl() {
return "https://host.com/AndroidWFC/MobileWS.asmx";
}
}
public class LoginSoap extends BaseSoapUrl {
@Override
public String getSoapAction() {
return "https://host.com/AndroidWFC/UserControl";
}
@Override
public String getMethodName() {
return "UserControl";
}
}