getServer().init()其实就是调用server的init函数,但是server是个interface,还要看其在new的时候,这个就是多态。
digester.addObjectCreate("Server", "org.apache.catalina.core.StandardServer", "className"); digester.addSetProperties("Server"); digester.addSetNext("Server", "setServer", "org.apache.catalina.Server");
上面的句子就类似于
Server server = new StandardServer(); server.init();
具体的继承关系的部分如图
源代码很好的运用了interface和抽象类,并且继承和接口实现都有运用。可以很好的理解接口和抽象类的关系。
依照这个UML图,写了个小的demo还分析,打包在附件中,interface和class在多态上的作用。
运行了如下语句,结果发现结果一样。
Server server = new StandardServer(); server.init(); LifecycleMbeanBase lserver = new StandardServer(); lserver.init(); Lifecycle lcserver = new StandardServer(); lcserver.init();
StandardServer既实现了接口server,又继承了来自server父类lifecycle(也是一个接口)实现的类LifecycleMbeanBase 。
这个关系就显的复杂了,到底在多态的时候怎么运作的?
可否这样认为:1. 实现接口,也是一定意义上的继承 2.接口的方法,最终运行还要看它实现的类
StandardServer最终拥有了server,lifecycle,MBeanRegistration三个特征。
server--定义很多例如全局Naming资源,端口号,地址等
lifecycle--规定了整个运行的状态,例如初始化后的状态可以使stop,也可以是starting,然后是started等。有点类似于状态机。
MBeanRegistration--资源的注册,涉及到JVM的管理