package com.gao.Reflect.test01;
//接口的制定方:美團(tuán)外賣
public interface Mtwm {
//在線支付功能:
void payonline();
}
package com.gao.Reflect.test01;
public class WeChat implements Mtwm{
@Override
public void payonline() {
//具體實(shí)現(xiàn)微信支付的功能
System.out.println("我已經(jīng)點(diǎn)了外賣,正在進(jìn)行微信支付");
}
}
package com.gao.Reflect.test01;
public class AliPay implements Mtwm{
@Override
public void payonline() {
//具體實(shí)現(xiàn)支付寶支付的功能
System.out.println("我已經(jīng)點(diǎn)了外賣,正在進(jìn)行支付寶支付");
}
}
package com.gao.Reflect.test01;
public class BankCard implements Mtwm{
@Override
public void payonline() {
System.out.println("我已經(jīng)點(diǎn)了外賣,正在進(jìn)行銀行卡支付");
}
}
package com.gao.Reflect.test01;
public class test {
public static void main(String[] args) {
// 定義一個字符串,用來模擬前臺的收銀方式
String str = "支付寶"; //以后可以學(xué)習(xí)從前面接收的方法,現(xiàn)在選擇手動輸入
//微信支付
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();
}
*/
//第二種法
//為了提高代碼的延展性--->面向?qū)ο蟮奶匦裕憾鄳B(tài)
//方法形參是接口,具體傳入的是接口的實(shí)現(xiàn)類的對象---->多態(tài)的一種形式
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";//字符串:實(shí)際上是微信類的全限定路徑
//下面的代碼就是反射
Class cls = Class.forName(str);
Object o = cls.newInstance();
Method method = cls.getMethod("payonline");
method.invoke(o);
}
}