在開發微信支付的過程中,微信官方提供了wxpay-sdk以及README.MD文件中開發demo。官方暫時未提供maven項目依賴,我們需要自己將wxpay-sdk代碼引入項目或者自己手動打包到本地或者私服通過maven來管理。
微信支付官方sdk地址:https://pay.weixin.qq.com/wiki/doc/api/download/WxPayAPI_JAVA.zip
當自己打包到本地或者私服項目通過maven管理wxpay-sdk,創建自己的實現類MyWXPayconfig繼承WXPayconfig抽象類時會提示「must either be declared abstract or implement abstract method ‘getAppID()’ in 'WXPayConfig」問題。
官方的wxpay-sdk源碼中WXPayconfig抽象類的抽象方法沒有指定public修飾符,則使用的是默認的修飾符default,default修飾符在其他包內是沒有訪問權限的,所以我們無法繼承WXPayconfig抽象類實現抽象方法。解決方案是通過修改官方wxpay-sdk源碼,將抽象方法的修飾符從默認修改爲public,然後重新打包到本地或者私服,解決該問題。
我們再來回顧下Java中的修飾符,我們可以使用訪問修飾符來保護對類、變量、方法和構造方法的訪問。Java 支持 4 種不同的訪問權限。
default (即默認,什麼也不寫): 在同一包內可見,不使用任何修飾符。使用對象:類、接口、變量、方法。
private : 在同一類內可見。使用對象:變量、方法。 注意:不能修飾類(外部類)
public : 對所有類可見。使用對象:類、接口、變量、方法
protected : 對同一包內的類和所有子類可見。使用對象:變量、方法。 注意:不能修飾類(外部類)。
我們可以通過以下表來說明訪問權限:
修飾符 | 當前類 | 同一包內 | 子孫類(同一包) | 子孫類(不同包) | 其他包 |
---|---|---|---|---|---|
public |
Y | Y | Y | Y | Y |
protected |
Y | Y | Y | Y/N(說明) | N |
default |
Y | Y | Y | N | N |
private |
Y | N | N | N | N |