本帖最后由 自闭宅男 于 2014-7-8 20:31 编辑
------- <a target="blank">android培训</a>、<a target="blank">java培训</a>、期待与您交流! ----------
在面向对象技术在实际开发中有很多的特性,总结起来最核心的特性主要有三个:封装,继承和多态。
一.封装性
封装性在实际实现时,将复杂的内部结构隐藏起来,并未这组复杂的结构取一个统一的名称进行使用。在现实生活中有许多封装的例子,例如将电脑中有许多复杂的电路和内部存储磁片结构封装起来,并将这个结构取名叫硬盘,在平时使用中我们知道怎么对它存储数据进行了,一般没必要了解其内部构造及原理。
在面向对象技术中,类是典型的封装特性的体现。类将许多功能和特性组合在一起,统一一个结构,并使用类(calss)代表这个结构。
封装的最大好处是隐藏类的内部实现(内部结构)进行统一的管理,这样方便调用也降低了项目的难度。
我们以生产一辆小汽车为例,可以把这个汽车看做要设计的整个软件项目,在实际的生产中,我们可以把小汽车的分解为很多组件,公司将各个组件的设计分发给各个部门,再由各个部门生产自己部门的组件,最后进行统一的组装。在生产过程中各个部门之间的关联性很小,如生产轮胎部门,不需要去生产发动机的部门了解发动机内部构造。这里每个组件就相当于一个类,每个类将自己内部封装起来,只通过名称使其他类了解该类的作用,并向其他类开放一些基本功能便于它们调用。
一般我们将各类之间的关联程度称为耦合性,类和类之间的相互影响越低,其耦合性就越低。在具体的项目中,类与类之间的耦合性越低,项目总体的交流频率就降低了,从而降低了整个项目的复杂度,这也是程序设计人员一直以来追求的目标之一。
二.继承性
①在我们的普遍认知中,喜欢将许多有一定相似度的东西划在一起。在自然界中,继承性也是十分普遍的一类现象。我们将许多动物分为科,门,属等,例如老虎属于猫科动物,小老虎就具有父辈老虎的体色等特点,在这里猫科动物是老虎这类动物的父类,他们之间有包含和被包含关系。也就是说只要两个类之间有包含关系,那么他们之间就存在继承。
继承性提供了全新的类的设计方式,可以充分利用已有类中的方法和功能,这样极大地降低了代码的复杂度和可读性,对于大型项目的建立十分有益,式设计类的一种革命。同时很多技术的应用,也包含大量的继承,这样使得整个体系更加固定。
②继承语法:访问控制符[修饰符] class 类名 extends 父类名 {
············
}
③实例代码:
//Catamount.java
public class Catamount {
/*类型名称*/
String Bodycolor;
int age;
}
//Tiger.java
public class Tiger extends Catamount {
/*食物类型*/
String food;
}
④方法的覆盖
在子类内部重新书写父类中方法的语法现象,称作方法覆盖(override)。
方法覆盖在实际使用中保持了类的结构的统一,极大地方便了程序开发人员的使用,便于项目整体结构保持统一,便于项目维护。在进行方法覆盖时,子类的方法和父类的方法声明相同,而且子类的方法的限制不能比父类的方法严格。例如不能使用比父类更大的访问控制符,或者抛出比父类更多的异常(Exception)。
恰当的使用继承便于项目的开发。
⑤需要注意的问题
I属性覆盖没必要
方法覆盖可以重写对应的功能,语法上也支持属性覆盖,但实际使用时修改属性的类型将导致结构混乱,所以继承是不使用属性覆盖(子类构造方法的参数列表和父类构造方法参数列表不必完全相同)。
II子类构造方法的书写
在子类构造方法内部必须调用父类的构造方法,若子类内部未书写调用父类的构造方法的代码时,子类的构造方法将自动调用父类默认的构造方法;而当父类中不存在默认构造方法,则必须在子类内部使用super关键字手动调用。
III子类构造过程
设A为父类,B为子类
(1)类A的属性初始化
(2)类A的构造方法
(3)类B的属性
(4)类B构造方法
⑥继承的设计
*自上而下的设计
先设计父类,然后增加子类,并在子类内部实现或添加对应方法。
*自下而上的设计
先不考虑类的关系,每个类分开设计,然后把重复的属性和方法抽象出来形成父类。
三.多态性
多态性是面向对象技术中的最灵活的特性,主要是增强项目的扩展性,提高了代码的可维护性。
①对象类型的多态
对象类型的多态是指声明对象的类型不是对象的真正类型,其由创建对象时调用的构造方法决定。另外,按照继承性的说明,子类的对象也是父类类型的对象,可以直接赋值。
测试代码:
/*测试对象类型的多态*/
public calss TestobjectType {
public static void main(String args[]) {
Superclass sc = new Subbclass();
boolean b = sc instanceof Subbclass1;
System.out.println(b);
System.out.println(b1);
}
}
该测试程序的输出结果是:
TRUE
TRUE
············································································待续
|
|