java中任意对象强转为接口类型都不会有编译错误,java中的类可以多实现接口,Java编译器无法判断该类是否实现了该接口所以不会有编译错误。也就是说,这里编译是没什么问题的,运行的时候就有问题了。
我模拟了一下你的环境,发现判断条件是一直都是false的,你运行也不会出错,因为进不去里面。我将父类强转放在外面,运行就出错了。
测试结果:父类转不了接口。而子类实现了方法,可以转
已经做了判断,如果p3实现了接口,那么强转成接口
这样不管条件到底是true还是false,总不会抛错误
什么是多态:用抽象代表具体,越是抽象的越能代表更多具体的