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的回答,他实际上花了时间给你一个改进系统设计的解决方案。比我快几秒钟:(