如何从 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";
    }
}