67,549
社区成员




public class ClassA<ClassB bobj>{//<ClassB bobj>声明了一个被引用类ClassB的对象
/**
proxy关键字是亮点。它声明被引用对象bobj可以覆盖该方法
*/
proxy<bobj> public void action(){
System.out.println("this is b obj");
}
}
/**
ClassD覆盖了ClassA的action方法,屏蔽掉了bobj对象对action方法地覆盖权限。
*/
public class classD<ClassB bobj>extends ClassA<bobj>{
public void action(){
System.out.println("this is D obj");
}
}
/**
该类没有覆盖ClassA的action方法
*/
public class ClassB{
}
/**
但是ClassB的子类ClassC继承了ClassA给ClassB地授权,可以覆盖ClassA的action方法
*/
public class ClassC extends ClassB{
override<ClassA,bobj> public void action(){//override<ClassA,bobj>表明该对象以bobj的名义覆盖ClassA类的action方法
System.out.print("ClassC代理了ClassA,");
that.action();//还可以用that访问被被代理对象
}
}
测试代码:
ClassB b=new ClassB();
ClassA btoa=new ClassA<b>();//以ClassB类的对象为被引用对象构建ClassA方法
btoa.action()//由于b对象中没有覆盖ClassA的action方法,因此这里仅仅会打印"this is b obj"
ClassB c=new ClassC();
ClassA ctoa=new ClassA<c>();//以ClassC类的对象为被引用对象构建ClassA方法
ctoa.action()//ClassC类覆盖了ClassA的action方法,因此这里会打印"ClassC代理了ClassA,this is b obj"
ClassA ctod=new ClassD<c>();
ctod.action()//因为ClassD覆盖ClassA的action方法,因此这里只会打印"this is D obj"
当然代理方法不能被直接访问,因为普通访问无法获知被引用对象,代理方法能够相互访问,除此之外只能通过覆盖引用对象的方法被访问。
我认为代理必须是双方自愿的,即被代理对象和代理对象都同意的情况下才能代理,现在的代理模式是被代理对象强制代理对象代理自己,这个很不合理。而我设计的语言中,如果被引用对象没有指定代理方法,则仍然运行被引用对象的原来的方法,当然这个需要引用类授权,如果引用类子类覆盖父类方法使得被引用对象无权代理,则被引用对象仍然无法覆盖引用对象中的方法。
大家应该能够大概了解我的思想了,是不是很新鲜?下面我介绍一下我的编程思想:面向概念编程,以及我为什么要这么设计这个语言.