共有三个类 命名为A、B、C
他们的关系是A继承B,B有一个属性是C
public class ClassC {
public void print()
{
System.out.println("this is C");
}}
public class ClassB {
ClassC c;}public class ClassA extends ClassB{
public int a ;
public ClassA(int a)
{
this.a = a;
}
public static void main(String[] args) {
}}
问题:如何能够在A类中根据属性a的值动态地设置C类中print方法的行为?
比如如果a>0,在C的print方法前先输出"a为正数",再执行该方法;同理,若小于0,则先输出“a为负数”;真诚求教!
他们的关系是A继承B,B有一个属性是C
public class ClassC {
public void print()
{
System.out.println("this is C");
}}
public class ClassB {
ClassC c;}public class ClassA extends ClassB{
public int a ;
public ClassA(int a)
{
this.a = a;
}
public static void main(String[] args) {
}}
问题:如何能够在A类中根据属性a的值动态地设置C类中print方法的行为?
比如如果a>0,在C的print方法前先输出"a为正数",再执行该方法;同理,若小于0,则先输出“a为负数”;真诚求教!
解决方案 »
- 帮我看下这段简单代码
- 二叉树遍历问题
- oracle reports builder 怎么创建主从报表?
- 菜鸟请教
- 关于DatabaseMetaData的getColumns()方法参数问题,请高人帮帮忙
- 再发一帖,有关class文件打包问题
- 急急急!!!!!!! 如何在JFrame或者应用程序里播放声音?????麻烦了
- Swing的简单问题: 在JBuilder中,如何把图片作为JFrame窗体的背景,然后在图片上放几个按钮?
- 请问???我如何可将tomcat爆露目录的功能给去掉???
- 请问在用jbuilder开发JAVA程序时如何配置DB2的JDBC驱动程序
- java访问权限问题
- 请教个小问题
日后C中的print方法就可以访问自己的a属性的a属性了。尽管可以实现,但是这个设计是不好的。
如果可以改C类的代码就没什么意思了 要求就是不能改C的代码 A/B类都可以改
public int a ;
public ClassA(int a){
this.a = a;
c = new ClassC();
this.c.setOwner(this);
}
public static void main(String[] args) {
ClassA obj = new ClassA( 5 );
obj.c.print();
}
}class ClassC {
private ClassA owner;
public void setOwner (ClassA o){
owner = o;
}
public void print(){
System.out.println("this is C");
System.out.println("ClassA obj's attribute a is " + owner.a );
}
}class ClassB {
ClassC c;
}
不想修改C的代码也可以,
用AOP。
写个静态的吧,动态的也好理解
其实框架就是你这个框架,给B加个方法调用就行了public class ClassB {
ClassC c;
public void print()
{
System.out.println("执行前");
if(a>0) System.out.println("a为正数");
else if(a<0) System.out.println("a为负数");
c.print();
}
}
所有代码如下:import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;public class ClassA extends ClassB{
public int a ;
public ClassA(){}
public ClassA(int a){
this.a = a;
c = new ClassC();
}
public static void main(String[] args) {
ClassA obj = new ClassA( 5 );
obj.c.print();
}}class ClassC {
public void print(){
System.out.println("this is C");
}
}class ClassB {
ClassC c;
}@Aspect
class OwnerAwareAspect{
private ClassA objA;
@Pointcut("execution(* ClassC.print())")
public void classCPrint() {} @Before("classCPrint()")
public void printA() {
if ( objA.a > 0) System.out.println("a是正数,值为:" + objA.a);
else System.out.println("a不是正数,值为:" + objA.a);
} @Pointcut("initialization(ClassA.new(*)) && this (objA) " )
public void newClassA(ClassA objA) {}
@After("newClassA(objA)")
public void afterNewClassA(ClassA objA){
this.objA = objA;
}
}
public class ClassA extends ClassB{
public int a ;
public ClassA(){}
public ClassA(int a){
this.a = a;
c = new ClassD(this);
}
public static void main(String[] args) {
ClassA obj = new ClassA( 5 );
obj.c.print();
}}class ClassC {
public void print(){
System.out.println("this is C");
}
}class ClassB {
ClassC c;
}
class ClassD
{
ClassA a;
public ClassD(ClassA a){this.a=a;}
public void print(){
if ( a.a > 0) System.out.println("a是正数,a=:" + a.a);
else System.out.println("a不是正数,a=:" + a.a);
Super.print();
}
}