我是在学习Java的小白,Java的多态我了解了,在源码中运用非常多,但是这个强转还是不懂,一百度,前十页都是聊类型转换的,醉人。
举个例子
上图是在spring boot启动方法中,前面执行了context = createApplicationContext();
已经创建了context了,在我图片的刷新context中传递了context,好,继续
可以看到这个刷新方法中对context做了强转,使用了AbstractApplicationContext类型
疑问在这里,下面的两个截图都是AbstractApplicationContext抽象类中的方法
getBeanFactory是抽象方法,被AbstractApplicationContext抽象类调用,最后要去访问的是它的实现吧,实现是在GenericApplicationContext中
context由于是spring boot启动的,此时的context是AnnotationConfigServletWebServerApplicationContext
关系图
从这个继承关系来看,感觉是有这么点多态的意思,还是有点晕,((AbstractApplicationContext) applicationContext).refresh();
为什么可以这样用呢,这就是强转吗,说不上来的感觉,或许我对多态理解不深入?
关系图我再传个关键点部分的截图
有大佬路过可以发表下自己的理解
因为在转换时,前面已经用了
Assert.isInstanceOf()
进行断言了,如果是AbstractApplicationContext
才会进行转换。