簡體   English   中英

如何從Java的子類訪問基類中的方法

[英]How to access method in base class from child class in java

如何從子類訪問父類的方法? 以下是我的課程實現:

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接口。

所以我的問題是如何通過soapURL訪問BaseSoapUrl方法?

您可以將SoapURL接口SoapURL為一個abstract class ,可以在其中提供getNameSpace()getUrl()方法的一些通用實現, 將其他方法保留為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";
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM