---------------------- android培训、java培训、期待与您交流! ----------------------
面向对象程序设计(Object Oriented Programming,OOP)是一种基于对象概念的软件开发方法,是目前软件开发的主流方法。类是数据及对数据操作的封装体,类具有封装性、继承性和多态性。封装性是面向对象方法的基础。对象是类的实例,对象与类的关系就像变量和数据类型的关系一样。
一、类和对象概述
1、 类
面向对象程序设计是当今软件设计的主流方法。在面向对象技术中,将客观世界中的一个事物作为一个对象看待。例如,有个人叫张三,就看作一个对象。每个事物都有自己的属性和行为。描述张三的属性有姓名、性别、身高、体重,他的行为包括阅读、开车、游泳等。在面向对象的程序设计中,将属性及行为合起来定义为类。类成为定义一组具有共同属性和行为的对象的模版。
从程序设计的角度,事物的属性可以用变量描述,行为用方法描述。类中的变量称为成员变量,类中的方法称为成员方法。成员变量反映类的状态和特征,成员方法表示类的行为能力。不同的类具有不同的特征和行为。
类具有封装性、继承性和多态性。类的这些特性构成面向对象程序设计思想的基石,实现了软件的可重用性,增强了软件的可扩充能力,提高了软件的可维护性。
2、 对象
类只定义属性和行为的模版,仅有类还不够,还必须创建属于类的对象。对象是类的实例,对象与类的关系就像变量和数据类型的关系一样。例如:int型变量j可以存放int型值,可以对j进行int 型数据的加、减、乘、除等操作。对象是类的“取值”,能够保存类的一个实例。
二、类的封装
封装是面向对象的核心特征之一。它提供了一种信息隐藏技术。类的封装包含两层含义:将数据和对数据的操作组合起来构成类,类是一个不可分割的独立单位;类中既要提供与外部联系的接口,同时又要尽可能隐藏类的实现细节。封装性为软件提供了一种模块化的设计机制,设计者提供标准化的类模块,使用者根据实际需求选择所需要的类模块,通过组装类模块实现大型软件系统。各模块之间通过接口衔接和协同工作。
访问权限
Java为类设置了两种访问权限,为类中的成员变量和方法设置了四种访问权限。分别为:public(公有)、protected(保护)、缺省和private(私有)。四种访问权限的访问范围见下图。
权限修饰符 | 本类 | 本类所在包 | 其他包中的子类 | 其他包中的非子类 |
public | √ | √ | √ | √ |
protected | √ | √ | √ | - |
缺省 | √ | √ | - | - |
private | √ | - | - | - |
三、 类的继承
继承是由已有类创建新类的机制,是面向对象程序设计中实现软件可重用性的最重要的手段。
由一个已有类定义一个新类,称为新类继承了已有类。被继承的已有类称为父类或超类,所定义的新类称为子类或派生类。通过继承,子类拥有父类的所有成员(除private成员和构造方法),包括成员变量和成员方法,也可以对父类中的成员变量和方法进行更改,使类的功能得以扩充。
定义子类:
[修饰符] class 类名 extends 父类名
{
成员变量声明部分
成员方法声明部分
}
其中:
(1) 修饰符说明类的访问权限(public)、是否为抽象类(abstract)或最终类(final)。
(2) 类名表示通过继承定义的新类,extends后面的父类名表示新类所继承的父类。类名需符合java对标识符的规定。
(3) 一个类只能继承一个父类,称为单重继承。
四、 类的多态
多态性指同一名字的方法可以有多种实现,程序运行时,根据调用方法的参数或调用方法的对象自动选择一个方法执行。类的多态性提供了方法设计的灵活性和执行的多样性。多态通过方法的重载(overload)和覆盖(override)来实现。
① 方法重载
在一个类中,多个方法具有相同的方法名,却具有不同的参数表,称为方法的重载。程序运行时,根据参数表决定所执行的方法。重载表现为同一个类中方法的多态性。
重载方法中的参数表必然不同,表现为参数个数不同,或参数类型不同或参数顺序不同。
② 方法覆盖
覆盖是指子类重定义了父类中的同名方法。覆盖表现为父类与子类之间方法的多态性。如果父类中的方法体不适合子类,子类中可以重新定义之。子类中定义的方法与父类中的方法具有相同的方法名和参数表,但具有不同的方法体。父类和子类具有同名方法,称子类方法覆盖了父类方法。
例:
public class A { public void start() { System.out.println(“A is start!”); } } class B extends A { public void start() { System.out.println(“B is start!”); } }
上面这个例子中,子类B覆盖了A中的start()方法.
---------------------- android培训、java培训、期待与您交流! ----------------------