重写一个类的方法,可以使用如下三种方法:
1、创建一个类的子类,重写该方法
2、创建一个包装类,重写该方法
3、创建一个动态代理,重写该方法,动态代理使用的是反射技术。
下面是动态代理java实现。
//接口 StudentDao
package dao;
public interface StudentDao{
public void printStudenInfo();
}
//接口PersonDao
package dao;
public interface PersonDao{
public void printPersonInf();
}
//实现类PersonDaoImp
package dao.Impl;
public class DaoImpl implements StudentDao,PersonDao {
@Override
public void printStudentInfo() {
// TODO Auto-generated method stub
System.out.println("I am an student,my name is xxxx");
}
@Override
public void printPersonInfo() {
// TODO Auto-generated method stub
System.out.println("my name is xxxxx");
}
}
///处理类
package proxy.handler;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;public class DynamicProxy implements InvocationHandler{
private Object obj;
public DynamicProxy(Object obj){
this.obj = obj;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
// TODO Auto-generated method stub
System.out.println("before invoke");
if(method.getName().equals("printStudentInfo")){
System.out.println("Proxy print: I am an student ,my name is xxxx...");
return null;
}else{
Object result = method.invoke(obj, args);
return result;
}
}
}
//测试程序
package proxy.demo;
import java.lang.reflect.Proxy;
import cn.itcast.Interface.SecSubject;
import cn.itcast.Interface.Subject;
public class DyanmicProxyDemo {
public static void main(String[] args) {
DaoImpl dl = new DaoImpl();
DynamicProxy handler = new DynamicProxy(dl);
StudentDao sd = (StudentDao) Proxy.newProxyInstance(handler.getClass()
.getClassLoader(), dl.getClass().getInterfaces(), handler);
sd.doAnothSomething();
}
}
//输出结果:
Proxy print: I am an student ,my name is xxxx...