Java微信支付官方wxpay-sdk無法繼承WXPayconfig類問題

在開發微信支付的過程中,微信官方提供了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