关于父类引用指向子类对象在javaee中的理解(初学)

今天看了ssh框架

在当时不太理解一个点是dao,daolmpl,server,serverlmpl,action这几个之间的关系。

总结:dao和server都是接口,daolmpl和serverlmpl分别是前两个接口的实现类,action类是属于mvc结构中的跳转控制部分。

页面有请求,请求发送到配置文件中然后配置文件会去找对应的action中的方法(先对传进来数据分析,然后找到可以承载这个数据的对应的类,并实例化出对象,当然这都是框架自动进行的),在方法中会调用server接口,使用的是serverlmpl中的实现方法,在serverlmpl中会有调用dao接口,使用的是daolmpl中的实现方法。

让我不理解的是在serverlmpl中首先声明了一个dao接口的引用,之后直接使用了daolmpl里面的实现方法,如果这时候一个接口有不同的实现类,如何确定用的是哪个实现类的方法呢

最后终于知道了在serverlmpl中只是声明一个接口的好处了,就是如果只有一个实现类那可以直接调用方法,如果接口有多个实现类,那么如果在serverlmpl中想要在他的实现方法中调用dao中的不同方法,只需要在方法中实例化dao的实现类,然后进行调用。

package college;


public class Test1 {
A a;


public static void main(String[] args) {
new Test1().test1();
}



public void test1() {
// 此时想用接口A的实现类B中的方法A1
// 只需要控制a的指向就ok
a = new B();
System.out.println(a.A1());
a = new C();
System.out.println(a.A1());


}


}
//接口A
interface A {
public String A1();


public void A2();


public void A3();
}
//实现类B
class B implements A {
public String A1() {
return "第一种实现";
};


public void A2() {
};


public void A3() {
};
}
//实现类C
class C implements A {
public String A1() {
return "第二种实现";
}


public void A2() {
};


public void A3() {
};

}

所以说。。不要轻易怀疑干了这么多年的人这么写有用吗,先知道为什么这么写。

ps:最后你也不要忘了我。责任是成熟的标志,成熟代表要学会掩饰自己的情绪,装成熟好累,我好想你。

猜你喜欢

转载自blog.csdn.net/qq_37752233/article/details/79740146
今日推荐