package com.gao.Reflect.test01;
//接口的制定方:美團外賣
public interface Mtwm {
//在線支付功能:
void payonline();
}
package com.gao.Reflect.test01;
public class WeChat implements Mtwm{
@Override
public void payonline() {
//具體實現微信支付的功能
System.out.println("我已經點了外賣,正在進行微信支付");
}
}
package com.gao.Reflect.test01;
public class AliPay implements Mtwm{
@Override
public void payonline() {
//具體實現支付寶支付的功能
System.out.println("我已經點了外賣,正在進行支付寶支付");
}
}
package com.gao.Reflect.test01;
public class BankCard implements Mtwm{
@Override
public void payonline() {
System.out.println("我已經點了外賣,正在進行銀行卡支付");
}
}
package com.gao.Reflect.test01;
public class test {
public static void main(String[] args) {
// 定義一個字符串,用來模擬前臺的收銀方式
String str = "支付寶"; //以后可以學習從前面接收的方法,現在選擇手動輸入
//微信支付
if("微信".equals(str)){//str.equals("微信")--->容易報空指針異常
//new WeChat().payonline();//提取出一個方法
pay(new WeChat());
}
//支付寶支付
if("支付寶".equals(str)){
//new AliPay().payonline();
pay(new AliPay());
}
//銀行卡支付
if("銀行卡".equals(str)){
pay(new BankCard());
}
}
/*第一種方法
//微信支付
public static void pay(WeChat wc){
wc.payonline();
}
//支付寶支付
public static void pay(AliPay ap){
ap.payonline();
}
//銀行卡支付
public static void pay(BankCard bc){
bc.payonline();
}
*/
//第二種法
//為了提高代碼的延展性--->面向對象的特性:多態
//方法形參是接口,具體傳入的是接口的實現類的對象---->多態的一種形式
public static void pay(Mtwm m){
m.payonline();
}
}
利用反射解決 (方法三)
package com.gao.Reflect.test01;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class Demo {
public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, NoSuchMethodException, InvocationTargetException {
String str = "com.gao.Reflect.test01.WeChat";//字符串:實際上是微信類的全限定路徑
//下面的代碼就是反射
Class cls = Class.forName(str);
Object o = cls.newInstance();
Method method = cls.getMethod("payonline");
method.invoke(o);
}
}