如何从 java 中的子 class 访问基 class 中的方法
How to access method in base class from child class in java
如何从子 class 访问父 class 的方法?以下是我的 class 实现:
public interface BaseUrl {
public String getNameSpace();
public String getUrl();
}
BaseSoapUrl Class:
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 Class:
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 Class:
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();
现在 return 形式的 public String getNameSpace();
和 public String getUrl();
值在所有子 classes 中都是相同的;那么为什么要一次又一次地编写代码。由于正在使用 Web 服务,将会有许多 class 将实现 SoapURL 接口。
所以我的问题是如何通过 soapURL
访问 BaseSoapUrl
中的方法?
您可以将 SoapURL
接口重构为 abstract class
,您可以在其中提供 getNameSpace()
和 getUrl()
方法的一些通用实现 和将其他的保留为abstract
,这样sub-类将被迫为它们提供实现。
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() 方法。
如果重构的目的是始终 return 某些 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";
}
}
如何从子 class 访问父 class 的方法?以下是我的 class 实现:
public interface BaseUrl {
public String getNameSpace();
public String getUrl();
}
BaseSoapUrl Class:
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 Class:
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 Class:
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();
现在 return 形式的 public String getNameSpace();
和 public String getUrl();
值在所有子 classes 中都是相同的;那么为什么要一次又一次地编写代码。由于正在使用 Web 服务,将会有许多 class 将实现 SoapURL 接口。
所以我的问题是如何通过 soapURL
访问 BaseSoapUrl
中的方法?
您可以将 SoapURL
接口重构为 abstract class
,您可以在其中提供 getNameSpace()
和 getUrl()
方法的一些通用实现 和将其他的保留为abstract
,这样sub-类将被迫为它们提供实现。
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() 方法。 如果重构的目的是始终 return 某些 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";
}
}