第4章 面向对象编程.ppt
《第4章 面向对象编程.ppt》由会员分享,可在线阅读,更多相关《第4章 面向对象编程.ppt(82页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第4章章 面向对象编程面向对象编程 主要任务主要任务:理解面向对象编程的基本概念理解面向对象编程的基本概念 了解类的封装方法了解类的封装方法 如何创建类和对象如何创建类和对象 了解成员变量和成员方法的特性了解成员变量和成员方法的特性 学习使用学习使用OOP方式进行程序设计方式进行程序设计 本章主要内容l1.面向对象基本概念面向对象基本概念 l2.Java的类与对象的类与对象 l3.成员变量与封装成员变量与封装 l 4.成员方法成员方法4.1 面向对象基本概念面向对象基本概念lJava是完全面向对象编程语言。面向是完全面向对象编程语言。面向对象编程(对象编程(OOP)是一种全新的编程)是一种全
2、新的编程理念,如果从来没有过理念,如果从来没有过OOP编程经验,编程经验,你需要从基本概念开始。你需要从基本概念开始。l什么是对象?类又是什么?它们之间有什么是对象?类又是什么?它们之间有什么关系?对象是如何通过消息和外部什么关系?对象是如何通过消息和外部通讯的?通讯的?l下面的内容就讨论这些问题。下面的内容就讨论这些问题。4.1.1 对象对象l在开发软件的信息世界中,对象定义为在开发软件的信息世界中,对象定义为相关数据和方法的集合。相关数据和方法的集合。l对象是现实世界对象的抽象模型。从现对象是现实世界对象的抽象模型。从现实世界对象中抽象出来的对象使用数据实世界对象中抽象出来的对象使用数据和
3、方法描述其现实世界中的状态和行为和方法描述其现实世界中的状态和行为特征,一般通过变量描述其状态,通过特征,一般通过变量描述其状态,通过方法实现其行为。方法实现其行为。l变量是一种有名称的数据实体,而方法变量是一种有名称的数据实体,而方法则是和对象相关的函数或过程。则是和对象相关的函数或过程。4.1.2 封装封装l封装的含义是把类设计成一个黑箱,使封装的含义是把类设计成一个黑箱,使用者只能看见类中定义的公共方法,而用者只能看见类中定义的公共方法,而看不到方法实现的细节,也不能直接对看不到方法实现的细节,也不能直接对类的数据进行操作,迫使用户通过接口类的数据进行操作,迫使用户通过接口去访问数据,这
4、种封装正是去访问数据,这种封装正是OOP设计设计者追求的理想境界。者追求的理想境界。l相关数据和方法封装到一个包里,为程相关数据和方法封装到一个包里,为程序员带来了两个好处:模块化和数据隐序员带来了两个好处:模块化和数据隐藏。藏。4.1.3 消息消息l对象的行为由方法来实现,消息传递是对象的行为由方法来实现,消息传递是对象之间进行交互的主要方式。对象之间进行交互的主要方式。l构成消息的三个要素是:构成消息的三个要素是:接收消息的对象接收消息的对象 接收消息后进行处理的方法接收消息后进行处理的方法 方法所需要的参数方法所需要的参数 4.1.4 类 l类就是对象的软件图纸、模板或原型,类就是对象的
5、软件图纸、模板或原型,它定义了同类对象共有的变量和方法。它定义了同类对象共有的变量和方法。l类和对象二者不太容易区分。一方面,类和对象二者不太容易区分。一方面,由于软件对象都是现实对象或抽象概念由于软件对象都是现实对象或抽象概念的电子模型,另一方面,经常不加区分的电子模型,另一方面,经常不加区分地将对象和类统称为地将对象和类统称为“对象对象”。lJava编程就是设计类,可以采用自定编程就是设计类,可以采用自定义方法或继承方法设计一个类,然后使义方法或继承方法设计一个类,然后使用它的实例对象完成具体的功能。用它的实例对象完成具体的功能。4.1.5 继承继承l继承(inheritance)不但可以
6、发生在同一个层次上,也可以发生在不同层次上。所有层次的类都是从Object类那里直接或间接地衍生下来的。Object仅提供了所有的类在Java虚拟机上运行时所需要的基本状态和方法。一般来说,层次越高,类就越抽象,反之类就越具体。l继承使父类的代码得到重用,在继承父类提供的共同特性基础上添加新的代码,使编程不必一切都从头开始,有效提高了编程效率。4.1.6 接口接口l接口(接口(interface)可以看成是为两个不相关)可以看成是为两个不相关的实体提供交流途径的设备,例如语言就是的实体提供交流途径的设备,例如语言就是两个人进行交流的接口。在两个人进行交流的接口。在Java中,接口就中,接口就是
7、为两个不相关的类提供交流的设备。接口是为两个不相关的类提供交流的设备。接口非常类似于协议(非常类似于协议(protocol一种共同行为的一种共同行为的约定),是一个包含方法定义和常量值的集约定),是一个包含方法定义和常量值的集合。合。l接口不需要建立继承关系,就可以使两个不接口不需要建立继承关系,就可以使两个不相关的类进行交互。接口提取了类的某些共相关的类进行交互。接口提取了类的某些共同点,声明一些能被多个类实现的方法,但同点,声明一些能被多个类实现的方法,但不给出方法体。接口由类的声明语句中的不给出方法体。接口由类的声明语句中的implements关键字引入,并在类体中实现接关键字引入,并在
8、类体中实现接口的方法。口的方法。例4.1 设计一个Applet小程序,使其可以进行简单的加法运算。/源程序名:源程序名:Addition.javaimport java.awt.*;import java.awt.event.*;import java.applet.Applet;public class Addition extends Applet implements ActionListener Label label1=new Label(+);Label label2=new Label(=);TextField field1=new TextField(6);TextField
9、field2=new TextField(6);TextField field3=new TextField(6);Button button1=new Button(相加相加);public void init()/初始化初始化 add(field1);add(label1);add(field2);add(label2);add(field3);add(button1);button1.addActionListener(this);public void actionPerformed(ActionEvent e)/处理按钮事件处理按钮事件 int x=Integer.parseInt(
10、field1.getText()+Integer.parseInt(field2.getText();field3.setText(Integer.toString(x);/数值数值转换为字符串转换为字符串 现在让我们使用面向对象的思想来分析一下Addition.java源程序的结构:l前面前面3行是说明语句,分别引入行是说明语句,分别引入Java系系统包统包awt和和applet语句。语句。语句语句import java.applet.Applet引入了引入了applet中的中的Applet类,类,语句语句import java.awt.*引入了引入了awt包中包中的所有类,的所有类,语句语
11、句import java.awt.event.*引入了引入了awt的的event包的所有类。包的所有类。l第第4行开始是程序的主体,声明了行开始是程序的主体,声明了Addition类,它继类,它继承自承自Applet类。继承不是目的而是一种手段,作为类。继承不是目的而是一种手段,作为Applet的一个子类,具有的一个子类,具有Applet的共性。继承的状的共性。继承的状态和方法往往不足以实现程序的要求,必须根据题态和方法往往不足以实现程序的要求,必须根据题目的具体要求,由用户添加各种对象和方法,改造目的具体要求,由用户添加各种对象和方法,改造成满足题目要求的程序。成满足题目要求的程序。Java
12、编程就是基于这样的编程就是基于这样的思想。思想。l第第4行是类声明语句行是类声明语句public class Addition extends Applet implements ActionListener 说明说明Addition是继承自是继承自Applet的公共子类,并建立了一个单击事的公共子类,并建立了一个单击事件监听器件监听器ActionListener接口,在程序运行时可监接口,在程序运行时可监听发生了什么事件,并负责调用相应的事件处理方听发生了什么事件,并负责调用相应的事件处理方法作出响应。这个框架出来后,剩下的任务就是设法作出响应。这个框架出来后,剩下的任务就是设计成员变量和成
13、员方法了。计成员变量和成员方法了。l第5到10行声明了Addition类的6个对象数据。两个标签对象用于显示运算符号;三个文本域对象用于接受用户的输入;一个按钮对象用于执行加法运算。l第11行到19行是Addition类包含方法init的声明和实现语句。l类中所有的对象行为都由这个类来控制,这种控制是通过改造继承下来的init方法实现的。类所包含的方法相当于传统编程语言的过程或函数,可完成一定的功能。linit是一个不需要返回值的方法,init方法属于Applet,Addition对它进行了修改,由它实现将上面添加的各个对象加入到Addition的显示区,并给按钮对象注册事件监听器(Addit
14、ion)。l第20行到23行是actionPerformed事件处理方法的声明和实现语句 4.2 Java的类与对象的类与对象lJava程序的所有数据类型都是用类来程序的所有数据类型都是用类来实现的,实现的,Java语言是建立在类这个逻语言是建立在类这个逻辑结构之上,所以辑结构之上,所以Java是一种完全面是一种完全面向对象的程序设计语言。向对象的程序设计语言。l类是类是Java的核心,的核心,Java程序都由类组程序都由类组成,一个程序至少要包含一个类,也可成,一个程序至少要包含一个类,也可以包含多个类。对象是类的实例,以包含多个类。对象是类的实例,Java程序中可以使用标识符表示对象,程序
15、中可以使用标识符表示对象,并通过对象引用类中的变量和方法。并通过对象引用类中的变量和方法。4.2.1 类的创建类的创建l类通过关键字类通过关键字class来创建,下面的声明语句来创建,下面的声明语句格式给出了可能出现的符号和顺序:格式给出了可能出现的符号和顺序:public abstract final extends 父类父类 implements 接口接口 其中,其中,表示为可选项,表示为可选项,表示为必选项。表示为必选项。关键字含义说明如下:关键字含义说明如下:1class 类名lclass关键字告诉编译器这是一个类,关键字告诉编译器这是一个类,类名是可以自由选取但必须是合法的标类名是可
16、以自由选取但必须是合法的标识符。识符。l在声明类的语句中,在声明类的语句中,class前面的关键前面的关键字称为类的修饰符。字称为类的修饰符。2public(公共的)l在没有任何修饰符的缺省情况下,类只在没有任何修饰符的缺省情况下,类只能被同一个源程序文件或同一个包中的能被同一个源程序文件或同一个包中的其它类使用,如例其它类使用,如例4.3中的中的MyBox只能只能被被ClassDemo2使用。加上使用。加上public修饰修饰符后,类可以被任何包中的类使用,称符后,类可以被任何包中的类使用,称为公共类。有关包的概念请参考后面章为公共类。有关包的概念请参考后面章节的内容(目前可把包当作一个源程
17、序节的内容(目前可把包当作一个源程序文件)。文件)。3Abstract(抽象的)l有时,定义的类代表了一个抽象的概念,有时,定义的类代表了一个抽象的概念,就不能用它来实例化一个对象。就不能用它来实例化一个对象。l同样在同样在OOP中,可能建立了一个不需中,可能建立了一个不需要产生对象的类。例如,要产生对象的类。例如,java.lang包包中的中的Number类代表了数这个抽象概念,类代表了数这个抽象概念,可以用它在程序中产生一个数的子类,可以用它在程序中产生一个数的子类,如如Interger或或Float,但从,但从Number中直中直接生成对象是没有意义的。接生成对象是没有意义的。labst
18、ract说明的类称为抽象类,不能用说明的类称为抽象类,不能用它实例化一个对象,它只能被继承。它实例化一个对象,它只能被继承。4final(最终的)lfinal说明的类称为最终类。一个最终类说明的类称为最终类。一个最终类不可能有子类,也就是说它不能被继承。不可能有子类,也就是说它不能被继承。为什么要把一个类说明为最终类呢?有为什么要把一个类说明为最终类呢?有两点理由:为了提高系统的安全性和出两点理由:为了提高系统的安全性和出于对一个完美类的偏爱。于对一个完美类的偏爱。l黑客常用的一个攻击技术是设计一个子黑客常用的一个攻击技术是设计一个子类,然后用它替换原来的父类。子类和类,然后用它替换原来的父类
19、。子类和父类很相象,但做的事情却大不一样。父类很相象,但做的事情却大不一样。为防止这样的事情发生,你可以把你的为防止这样的事情发生,你可以把你的类声明为最终类,不让黑客有机可乘。类声明为最终类,不让黑客有机可乘。5Extends(继承)父类名lextends告诉编译器创建的类是从父类告诉编译器创建的类是从父类继承下来的子类,父类必须是继承下来的子类,父类必须是Java系系统类或已经定义的类。统类或已经定义的类。l从父类继承,可以提高代码的重用性,从父类继承,可以提高代码的重用性,不必从头开始设计程序。大部分情况下不必从头开始设计程序。大部分情况下应该利用继承的手段编程,只在没有合应该利用继承的
20、手段编程,只在没有合适的类可以继承时才自己设计类。适的类可以继承时才自己设计类。6Implements(实现)接口名limplements告诉编译器类实现的接口,告诉编译器类实现的接口,接口必须有定义,一般为系统类。接口必须有定义,一般为系统类。l接口是消息传递的通道,通过接口,消接口是消息传递的通道,通过接口,消息才能传递到处理方法中进行处理。息才能传递到处理方法中进行处理。implements说明你的类可以实现的一说明你的类可以实现的一个或多个接口,如果有多个接口,要用个或多个接口,如果有多个接口,要用逗号分隔。关于接口的设计和使用请参逗号分隔。关于接口的设计和使用请参考第考第6章的内容。
21、章的内容。例4.2 下面这个Applet程序将在页面上输出两个矩形,并伴有文字输出。见图:import java.awt.*;import java.applet.Applet;public class Class1 extends Applet private int x,y,width,height;public void init()width=60;height=60;public void setPosition(int xPos,int yPos)x=xPos;y=yPos;public void paint(Graphics g)setPosition(20,20);g.draw
22、Rect(x,y,width,height);g.drawString(矩形矩形 1 的的 X 位置位置:+x,20,100);g.drawString(矩形矩形 1 的的 Y 位置位置:+y,20,120);setPosition(170,20);g.drawRect(x,y,width,height);g.drawString(矩形矩形 2 的的 X 位置位置:+x,170,100);g.drawString(矩形矩形 2 的的 Y 位置位置:+y,170,120);4.2.2 对象的创建对象的创建l类是对象的产品模板。在现实世界里,我们类是对象的产品模板。在现实世界里,我们使用的是产品而
23、不是产品的图纸。同样道理,使用的是产品而不是产品的图纸。同样道理,Java运行的应该是用类创建的实例化对象。运行的应该是用类创建的实例化对象。l一个典型的一个典型的Java程序会创建很多对象,它们程序会创建很多对象,它们通过消息传递进行相互交流,共同完成程序通过消息传递进行相互交流,共同完成程序的功能。一旦任务完成,对象就会被垃圾收的功能。一旦任务完成,对象就会被垃圾收集器收回,完成它从创建、使用到清除的生集器收回,完成它从创建、使用到清除的生命三步曲。命三步曲。l下面介绍对象的创建过程。先看一个例子。下面介绍对象的创建过程。先看一个例子。例4.3 下面这个程序是改写后的例4.2,输出结果与图
24、4.2一样。import java.awt.*;import java.applet.Applet;public class Class2 extends Applet MyBox b1=new MyBox();MyBox b2=new MyBox(170,20,60,60);public void paint(Graphics g)b1.setPosition(20,20);b1.setSize(60,60);b1.draw(g);g.drawString(矩形矩形 1 的的 X 位置位置:+b1.getX(),20,100);g.drawString(矩形矩形 1 的的 Y 位置位置:+b
25、1.getY(),20,120);b2.draw(g);g.drawString(矩形矩形 2 的的 X 位置位置:+b2.getX(),b2.getX(),b2.getY()+80);g.drawString(矩形矩形 2 的的 Y 位置位置:+b2.getY(),b2.getX(),b2.getY()+100);class MyBox private int x,y,width,height;MyBox()x=0;y=0;width=0;height=0;MyBox(int xPos,int yPos,int w,int h)x=xPos;y=yPos;width=w;height=h;p
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第4章 面向对象编程 面向 对象 编程
限制150内