(一)面向对象概述
1.面向对象编程 是软件开发的一种新的方法,使用这种方法开发的软件具有易维护、可重用和可扩展等特性。
2.面向对象的基本概念
(1)对象
1)一个对象一般具有两方面的特征:状态和行为。状态是用来描述对象的静态特征,行为用来描述对象的动态特性。
2)对象是现实世界中的一个实体,它具有以下特征:有一个状态用来描述它的某些特征。有一组操作,每个操作决定对象的一个种功能或行为。
(2)类
类可以定义为具有相似特征和行为的对象的集合。属于某个类的一个具体的对象称为该类的一个实例。例如,我的小汽车儿是汽车类的一个实例。实例与对象是同一个概念。
(3)消息
1)对象与对象之间不是孤立的,它们之间存在着某种联系,这种联系是通过消息传递的。例如,开汽车就是人向汽车传递消息。
2)一个对象发送的消息包含三方面的内容:接收消息的对象;接收对象采用的方法作(操作);方法所需要的参数。
3.面向对象基本特征
三个特性:封装性、继承性和多态性
(1)封装性
封装 就是把对象的状态(属性)和行为(方法)结合成一个独立的系统单位,并尽可能地隐藏对象的内部细节。例如,一辆汽车就是一个封装体,封装了汽车的状态和操作。
封装使一个对象形成两个部分:接口部分和实现部分。对用户来说,接口部分是可见的,而实现部分是不可见的。
封装提供了两种保护。首先封装可以保护对象,防止用户直接存取对象的内部细节;其次封装也保护了客户端,防止对象实现部分的改变可能产生的副作用,即实现部分的改变不会影响到客户端的改变。
(2)继承性
继承的概念普遍存在于现实世界中。它是一个对象获得另一个对象属性的过程。继承之所以重要,是因为它支持层次结构类的概念。可以发现,在现实世界中,许多知识都是通过层次结构方式进行管理的。
如果不使用层次结构,那么对象就不得不明确定义自己的特征。如果使用继承,那么对象就只需定义自己特有的属性就可以了,至于基本的属性则可以从父类继承。
继承性体现了类之间的是一种( IS - A )关系。类之间的关系还有组合、关联等。
3.多态性
多态性 面向对象编程语言的一个重要特性。所谓多态,是指一个程序中相同的名字表示不同含义的情况。面向对象程序中的多态有多种情况。在简单的情况下,在同一个类中定义了多个名称相同的方法,即方法重载:另一种情况是子类中定义的与父类中的方法同名的方法,即方法覆盖。这两种情况都称为多态,且前者称为静态多态,后者称为动态多态。
3.1多态与动态绑定
(1)多态就是多种形式,是指 Java 程序中一个类或多个类中可以定义多个同名方法,这多个同名方法完成的操作不同,这就是多态。多态性是指在运行时系统判断应该执行哪个方法的代码的能力。 Java 语言支持两种类型的多态:
1)静态多态:也叫编译时多态,是通过方法重载实现的。
2)动态多态:也叫运行时多态,是通过方法覆盖实现的。
将方法调用与方法体关联起来称方法绑定 。
例:说明了多态和方法动态绑定的概念。
程序运行结果为:
314.1592653589793
100.0
100.0
所有形状的面积和是:514.1592653589794
程序中使用抽象类 Shape 对象引用具体类的实例,在调用 getArea ()方法时,运行时系统根据对象的实际类型调用相应的 getArea ()方法。如果将来程序向数组中再增加一个Shape 的子类 对象,程序不需要修改。这可大大提高程序的可维护性和可展性。
4.方法重载
方法重载是指在一个类中定义多个同名的方法,但是这些方法的参数类型、数量或顺序不同。方法重载可以提高代码的复用性和可读性。下面我们将详细介绍方法重载的相关技术。
(1)方法重载的定义
方法重载是指在同一个类中,定义多个名称相同但参数列表不同的方法。在调用这些方法时,编译器会根据传入的参数的类型、数量或顺序来判断应该调用哪个方法。方法重载的目的是为了提高代码的可读性和可维护性。
(2)方法重载的实现
方法重载的实现需要注意以下几点:
1)方法名必须相同,参数列表必须不同。
2)参数列表不同可以通过参数类型、参数数量或参数顺序来区分。
3)返回类型不同不能作为方法重载的区分依据。
4)访问修饰符、异常声明等与方法的区别无关,也不能作为方法重载的区分依据。
5)方法重载可以包含不同的访问修饰符,如public、private、protected等。
例如:
上面的代码定义了三个add方法,分别接收两个int类型的参数、两个double类型的参数、两个String类型的参数。通过参数类型的不同,实现了方法的重载。
(3)方法重载的优点
1)提高代码的可读性和可维护性。当方法的功能相似,但是需要接收不同类型的参数时,使用方法重载可以减少代码的冗余,降低代码维护的难度。
2)增强代码的复用性。方法重载可以使代码能够适应多种数据类型的操作,从而提高代码的复用性。
(4)方法重载的注意事项
1)方法重载只针对于方法,不包括构造方法。Java中的构造方法不支持重载,因为构造方法名称必须与类名完全一致,而方法重载的关键点是方法名相同。
2)参数类型不能只是返回类型的区别。如果你想要定义一个方法,只有返回类型不同,那么这是不被允许的。在Java中,方法签名由方法名称和参数类型列表组成,返回类型不是方法签名的一部分。
(5)总结
方法重载是Java语言中的一项重要特性,它能够提高代码的可读性、可维护性和复用性。
5.重写
(1)重写概念
在子类中可以根据需要对从父类中继承来的方法进行改造,也称 为方法的重置、覆盖。在程序执行时,子类的方法将覆盖父类的方法。
(2)重写的特点
1)子类重写的方法必须和父类被重写的方法具有相同的方法名称、参数列表 。
2)子类重写的方法的返回值类型不能大于父类被重写的方法的返回值类型 (返回类型为类)。
3)子类重写的方法使用的访问权限不能小于父类被重写的方法的访问权限 。
4)子类不能重写父类中声明为private权限的方法 。
5)子类方法抛出的异常不能大于父类被重写方法的异常 (父类异常的子类)。
重写实例:
Java的方法重写是面向对象编程中的重要概念。方法重写允许子类修改或扩展其父类方法实现,以满足子类的特定需求。Java中使用关键字super、@Override和final来实现方法重写。