首先一个接口
interface a {
void b();
void b1();
}
然后就是用内隐类
class c {
a theA = new a() {
public b() { ...... }
public b1() { ...... }
};
}
如果我有两个抽象类a1和a2都是属于a接口的抽象实现,实现了接口a的b1函数,如下
abstract class a1 {
public abstract void b();
public void b1() {......}
}
和
abstract class a2 {
public abstract void b();
public void b1() {......}
}
我同样可以通过抽象类来实现内隐类,如下:
a theA = new a1(){
public void b(){......}
};
或者
a theA = new a2(){
public void b(){......}
};
通过选不同的抽象实现,可以在毫无变化的情况下实现一些算法变化,而且实现松偶合。
注意:
那么我的问题来了,我们根据接口时可以不用关心使用的是哪个实现,只要当接口来用就可以,甚至可以根据一个传入的java.lang.Class对象来newInstance()一个对象再回溯成接口来用,但是在写内隐类的时候必须要指定是通过a1还是a2来实现内隐类,这样有点紧偶合了。
如何能实现,通过一个传入的抽象类,可能是a1,也可能是a2,但是我们不知道,也不关心,只知道它是一个a的抽象实现,如果我们直接拿这个不知道是a1还是a2的a来实现内隐类,还要保留a1或者a2对b1函数的实现算法,如何实现,实现内隐类的时候可以通过Class.forName("a1").newInstance(){...}来作吗?编译器提示newInstance()后必须是分号。
如何实现,各位大哥,小弟跪求了。