java提高篇(二)_理解java的三大特性之继承 转自 http://cmsblogs.com
“尽可能的复用代码使我们程序员一直在追求的”
继承(extends) : 就是一种复用代码的方式
继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功能,但不能选择性地继承父类,而是继承父类的全部非private属性 或 方法。
使用继承时需要记住三句话:
1、子类拥有父类非private的属性和方法。
2、子类可以拥有自己属性和方法,即子类可以对父类进行扩展。
3、子类可以用自己的方式实现父类的方法。(以后介绍)。
诚然,讲到继承一定少不了这三个东西:构造器、protected关键字、向上转型。
一. 构造器
1.构造器子类是继承不了的,它只能够被调用,而不能被继承,在子类中使用super(),即完成调用。对于继承,子类会默认调用父类的构造器,但是如果没有默认的父类构造器,子类必须要 显示的 指定父类的构造器,而且必须是在子类构造器中做的第一件事(第一行代码)。
“对象构建过程是从父类 ‘向外’ 扩散的,也就是从父类开始向子类一级一级地完成构建。而且我们并没有显示的引用父类的构造器,这就是java的聪明之处:编译器会默认给子类调用父类的构造器。但是,这个默认调用父类的构造器是有前提的:父类有默认构造器。如果父类没有默认构造器,我们就要必须显示的使用super()来调用父类构造器,否则编译器会报错:无法找到符合父类形式的构造器。”
二. producted 关键字;
1.目的:对子类开放权限。对于protected而言,它指明就类用户而言,他是private,但是对于任何继承与此类的子类而言或者其他任何位于同一个包的类而言,他却是可以访问的。
“可以使用protected访问修饰符来限制父类属性和方法的访问权限,但是最好的方式还是将 属性 保持为private(我们应当一致保留更改底层实现),通过protected方法来控制类的继承者的访问权限。”
三. 向上转型;
将子类转换成父类,在继承关系上面是向上移动的,所以一般称之为向上转型。由于向上转型是从一个叫专用类型向较通用类型转换,所以它总是安全的,唯一发生变化的可能就是属性和方法的丢失。这就是为什么编译器在“未曾明确表示转型”活“未曾 指定特殊标记”的情况下,仍然允许向上转型的原因。
总结:
1.慎用继承:
1、父类变,子类就必须变。
2、继承破坏了封装,对于父类而言,它的实现细节对与子类来说都是透明的。
3、继承是一种强耦合关系。
2.啥时候用继承:
问一问自己是否需要从子类向父类进行向上转型。如果必须向上转型,则继承是必要的,但是如果不需要,则应当好好考虑自己是否需要继承。