提升类属性与提升类方法一样,都是为了让子类能够继承父类中非私有(private)的属性字段,这样做当然是实现了代码重用了。
重构前代码例子如下:
- abstract class Animal {
- // some fields
- }
- class Dog extends Animal {
- public String name;
- }
- class Cat extends Animal{
- public String name;
- }
很明显上面的 Dog 类和 Cat 类存在相同属性,而且它们都是 Animal 抽象类的子类,此时应该将 name 属性提升到 Animal 类中以避免重复代码,如下:
- abstract class Animal {
- protected String name;
- // some fields
- }
- class Dog extends Animal {
- // field "name" from Animal
- }
- class Cat extends Animal{
- // field "name" from Animal
- }
这种提升属性的重构方法在设计模式中使用得更加明显,像装饰模式(Decorator),其中的抽象装饰者类中就拥有了自身类型的引用属性,并在构造方法中根据传入的具体装饰者(即其子类)来初始化该自身类型的属性。每个子类都获得了可以装饰自身的父类引用。
本文转自 xxxx66yyyy 51CTO博客,原文链接:http://blog.51cto.com/haolloyin/343780,如需转载请自行联系原作者