如何从java中的子类访问基类中的方法

时间:2015-02-20 10:07:02

标签: 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://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接口。

所以我的问题是如何访问BaseSoapUrlsoapURL中的方法?

2 个答案:

答案 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";
    }
}