有一个框架,包含4个函数,如:
public long t1(){
return 10;
}
public long t2(){
return 20;
}
public long t3() {
return 30;
}
public long t4(){
return (t2()-t1());
}
我们可以将t4的实现更改为:
public long t4(){
return (t3() - t1());
}
添加:我们不能改变现有框架的实现。
add2:这个框架的类不是用户直接使用的,所以我不能扩展它,重写方法
仅使用面向对象的Java或反射,您将永远无法准确地实现您所要求的。
实际上,改变方法的实现就是改变类的静态部分。这不能在类加载后实现。
但是如何在类加载之前更改静态部分呢?答案是:面向方面。然后,您可以在源时、编译时或类加载时更改类的静态部分。
由于您不拥有源代码,我认为您正在使用预编译库。所以你们必须在上课的时候做。这是由加载时编织器完成的,例如使用AspectJ。
我建议添加一个环绕通知来短路当前方法并执行你想要的语句。
总结:使用带有环绕建议的AspectJ方法
我们可以用method-overriding
的概念来覆盖现有的方法。
class Animal{
public void move(){
System.out.println("Animals can move");
}
}
class Dog extends Animal{
public void move(){
System.out.println("Dogs can walk and run");
}
}
public class TestDog{
public static void main(String args[]){
Animal a = new Animal(); // Animal reference and object
Animal b = new Dog(); // Animal reference but Dog object
a.move();// runs the method in Animal class
b.move();//Runs the method in Dog class
}
}