在java编程中,经常见到父类型引用指向子类型。我理解这样的好处:
- 可以保证代码的灵活性、隔离性,将代码不变(或者少变)的部分和多变的部分分离,从而将代码后续的扩展修改控制在尽量小的范围,扩展起来也方便。如果是针对接口、父类编程,后续子类的逻辑修改,修改子类就行了,代码修改的地方少,扩充起来方便。其实这也是框架的思想。就好比一棵树,树干变化缓慢,但树叶变化块,会掉落老叶子,长出新叶子,长出小的树枝。
- 使用了父类、接口共有的特性,这就形成了一个类别区分,自然而然地对代码实现的特性进行了分组。毕竟只有有共性的才会放在一起。
当然,如果子类增加了父类、接口没有的方法,用父类型引用指向子类型是无法访问的。
代码示例:
package com.thb;public interface Shape {public double calArea();
}package com.thb;public class Circle implements Shape {private double radius;public Circle(double radius) {this.radius = radius;}@Overridepublic double calArea() {return Math.PI * Math.pow(radius, 2);}}package com.thb;public class Rectangle implements Shape {private double length;private double width;public Rectangle(double length, double width) {this.length = length;this.width = width;}@Overridepublic double calArea() {return length * width;}
}package com.thb;public class Test2 { public static void main(String[] args) {Shape shape;shape = new Circle(2.0);System.out.println("area: " + shape.calArea()); shape = new Rectangle(1.0, 2.0); System.out.println("area: " + shape.calArea()); }
}