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);
}
}
标签:题目,void,public,gao,外卖,test01,com,美团,payonline
From: https://www.cnblogs.com/gaoxiaocuo/p/16771879.html