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的管理
本文深入探讨了使用interface和抽象类在多态中的应用,通过示例展示了如何实现接口、继承和接口实现类之间的关系,以及它们在实际编程中的作用。文章最后提供了相关代码示例及分析,帮助读者更好地理解接口、抽象类和多态的概念。
809

被折叠的 条评论
为什么被折叠?



