java中如何从子类访问基类中的方法
如何从子类访问父类的方法?以下是我的类实现:java中如何从子类访问基类中的方法,java,class,inheritance,interface,Java,Class,Inheritance,Interface,如何从子类访问父类的方法?以下是我的类实现: public interface BaseUrl { public String getNameSpace(); public String getUrl(); } BaseSoapUrl类: public class BaseSoapUrl implements BaseUrl { @Override public String getNameSpace() { return "https://h
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();
}
登录OAP类:
public class LoginSoap extends BaseSoapUrl implements SoapURL {
@Override
public String getSoapAction() {
return "https://host.com/AndroidWFC/UserControl";
}
@Override
public String getMethodName() {
return "UserControl";
}
}
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";
}
}
为了简化代码,我想这样实现它们。早些时候是这样的:
public interface SoapURL {
public String getNameSpace();
public String getUrl();
public String getSoapAction();
public String getMethodName();
}
private SoapURL soapURL = new LoginSoap();
String static final url = soapURL.getUrl();
登录OAP类:
public class LoginSoap extends BaseSoapUrl implements SoapURL {
@Override
public String getSoapAction() {
return "https://host.com/AndroidWFC/UserControl";
}
@Override
public String getMethodName() {
return "UserControl";
}
}
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";
}
}
我可以访问以下方法:
public interface SoapURL {
public String getNameSpace();
public String getUrl();
public String getSoapAction();
public String getMethodName();
}
private SoapURL soapURL = new LoginSoap();
String static final url = soapURL.getUrl();
现在返回值的形式是公共字符串getNameSpace()
和公共字符串getUrl()代码>在所有子类中都是相同的;那么,为什么要一次又一次地编写代码呢。由于正在使用web服务,将有许多类实现SoapURL接口
因此,我的问题是如何通过soapURL
访问BaseSoapUrl
中的方法?您可以将soapURL
接口重新分解为一个抽象类
,其中可以提供getNameSpace()
和getUrl()的一些常见实现
methods和将其他方法保留为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();
}
我认为你的重构是不正确的。如果您认为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";
}
}
通过使用super关键字'super.soapURL.getNameSpace()'这是error@SanjayKumar看看kocko的回答,他实际上花了时间给你一个改进系统设计的解决方案。比我快几秒钟:(