大家都知道是多态,但是你自己要明白为什么这么用,什么时候这么用。按照你上面的 User user = new UsreImpl(); 如果就这么一个实现类就没必要那么做了直接new个实现就可以了,但是如果user 的是实现类有两个以上,这么用才有价值 User user = new UsreImpl1(); UsreImpl2(); UsreImpl3(); 这样的直接好处在于你直接换掉实现类其它代码不用改变。 这也就是我们常说的lsp(里氏代换原则)原则的使用,任何父类可以出现的地方子类都可以代替,同时也是依赖倒转原则的提现,依赖倒转原则讲的是要依赖于抽象,不要依赖于具体实现,如果你直接new一个就依赖了具体实现,话也说回来,这些所谓ood原则都是理论,在实际编程中灵活使用,怎么提高程序扩展性,可维护性带来实际的好处才是我们追求的。
引用变量在编译阶段只能调用其编译时类型所具有的方法,但运行时则执行它运行时类型所具有的方法。通过引用变量来访问其包含的实例Field时,系统总是试图访问编译时类型所定义的Field,而不是运行时的Field。这种把子类对象赋给父类引用,也叫做向上转型,向上转型总是可以成功的。
这只是一种表现,你自己能够明白就好了,没必要纠结。
这样的好处就是还可以用user来new其他实现类。增强程序可扩展性。
User user = new UsreImpl(); 如果就这么一个实现类就没必要那么做了直接new个实现就可以了,但是如果user 的是实现类有两个以上,这么用才有价值
User user = new UsreImpl1();
UsreImpl2();
UsreImpl3();
这样的直接好处在于你直接换掉实现类其它代码不用改变。
这也就是我们常说的lsp(里氏代换原则)原则的使用,任何父类可以出现的地方子类都可以代替,同时也是依赖倒转原则的提现,依赖倒转原则讲的是要依赖于抽象,不要依赖于具体实现,如果你直接new一个就依赖了具体实现,话也说回来,这些所谓ood原则都是理论,在实际编程中灵活使用,怎么提高程序扩展性,可维护性带来实际的好处才是我们追求的。