ch04-Java面向对象编程技术_第1页
ch04-Java面向对象编程技术_第2页
ch04-Java面向对象编程技术_第3页
ch04-Java面向对象编程技术_第4页
ch04-Java面向对象编程技术_第5页
已阅读5页,还剩71页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第4讲Java面向对象编程技术授课课时:8课时〔360分钟〕主编:刘志成2主要内容本课目标新课引入与工程展示案例1—编写描述学生的Java类案例2—编写描述大学生的Java类案例3—方法重载与方法重写案例4—定义形状案例5—实现电视机遥控器案例6—读取队列元素案例7—操作字符串课堂实践稳固与提高3本课目标知识目标掌握面向对象程序设计的基本概念

掌握Java语言中类的声明及由类创建对象并使用对象掌握Java语言中继承的实现方法了解Java语言应用接口实现多态的方法与Java常用类库

技能目标能将简单的客观事物抽象成Java类

能应用Java面向对象特点解决实际问题态度目标严谨认真的工作态度语言表达和与人沟通能力养成规范化编程的习惯4教学情境--引入新课熟练掌握类的定义,对象的创立及对象之间的交互,子类和抽象类的定义及多态的实现与使用。工作任务工程展示5教师示范与讲解--1任务一:编写描述学生的Java类

案例分析6面向对象的根本概念1.对象对象〔Object〕就是客观存在的任何事物。2.类类〔class〕是对象的模板。即类是对一组有相同静态特性和相同动态行为的对象的抽象,一个类所包含的属性和方法描述一组对象的共同属性和行为。类是在对象之上的抽象,对象那么是类的具体化,是类的实例。7面向对象的根本概念3.接口如果我们把客观世界看成由不同的系统〔或类〕组成,这些系统〔或类〕之间需要通过一个公共的部件进行交流,我们把这个公共的部件称为接口〔Interface〕。4.消息消息就是对象之间进行通信的一种规格说明,对象之间进行交互作用和通信的工具。8面向对象的根本特性1.封装性封装是一种信息隐蔽技术,它表达于类的说明中,是对象的重要特性。封装的目的在于把对象的设计者和对象的使用者分开,使用者不需要知道行为实现的细节,只需用设计者提供的消息来访问该对象。在Java语言中,类是封装的最根本单位。封装有助于提高类和系统的平安性。9面向对象的根本特性2.继承性继承是类不同抽象级别之间的关系,是子类自动共享父类数据和方法的机制。

3.多态性对象根据所接收的消息产生行为,同一消息为不同的对象接收时可产生完全不同的行动,这种现象称为多态性。多态允许对任意指定的对象自动地使用正确的方法,并通过在程序运行过程中将对象与恰当的方法进行动态绑定来实现。10类的定义

Java中的类的定义包括类声明和类体两局部内容。类声明的格式如下:[public][abstract][final]class类名[extends父类名][implements接口名表]类体的通用格式如下:[public][abstract][final]class类名[extends父类名][implements接口名表]{成员域定义局部;方法定义局部;}11

课堂演示-编写描述学生的Java类

【案例4-1】判断指定数的奇偶性【案例学习目标】理解面向对象的根本概念,掌握Java语言中类的根本格式,能够简单实现对客观事物到Java类的抽象。【案例知识要点】类的含义、类的定义、Java类的声明方法、Java类体的定义方法。【案例完成步骤】学生对象分析类的定义12

课堂演示-编写描述学生的Java类

学生对象分析项目名称含义属性sName表示学生姓名,String类型bGender表示学生性别,boolean类型,false代表"女"iAge表示学生年龄,int类型dHeight表示学生身高,double类型dWeight表示学生体重,double类型iCounter表示学生总人数,int类型方法setInfo用于设置学生相关信息的方法getInfo用于获得学生相关信息的方法getCounter用于获得学生总人数的方法13

课堂演示-编写描述学生的Java类

类的定义publicclassStudent{publicstaticintiCounter=0;StringsName;booleanbGender=false;//false代表"女"intiAge;doubledHeight; //单位为厘米

doubledWeight; //单位为公斤

publicstaticvoidgetCounter(){System.out.println("学生总数:"+++iCounter);}14

课堂演示-编写描述学生的Java类

publicvoidgetInfo(){System.out.print("姓名:"+sName+"\t");System.out.print("性别:"+bGender+"\t");System.out.print("年龄:"+iAge+"岁\t");System.out.print("身高:"+dHeight+"厘米\t");System.out.println("体重:"+dWeight+"公斤");}publicvoidsetInfo(Stringn,booleang,inta,doubleh,doublew){sName=n;bGender=g;iAge=a;dHeight=h;dWeight=w;}}15学生模仿--1任务一:学生模仿完成【案例4-1】编写学生类16教师示范与讲解--2任务一:编写描述大学生的Java类

案例分析17成员变量定义

成员变量描述了类的静态特性。类的静态特性包括两局部:类的特性和对象的特性信息。对应的Java也将成员变量分为两种:类变量和实例变量。在变量定义时,可同时给其赋初值,将其初始化类的成员变量定义的一般格式如下:[存取修饰符][final][transient][static][volatile]类型变量名[=值或表达式][,变量名[=值或表达式]……];18成员方法定义

方法是一个包含一条或多条语句的代码块,用来完成一个相对独立的功能方法有自己的名称以及可以重复使用的变量与类成员变量一样,方法也分为类方法〔也称为静态方法〕和实例方法两种类的成员方法定义的一般格式如下:[存取修饰符][final][static][abstract][native][synchronized][方法返回类型]方法名〔[形式参数表]〕[throws异常表]{可执行代码;}19构造方法

构造方法的主要用途有两个:一是通知Java虚拟机创立类的对象,二是对创立的对象进行初始化如果在程序中没有显式的定义类的构造方法,Java编译器将自动提供一个构造方法,称为默认构造方法可以在【案例4-1】中,添加一个构造方法:publicStudent(){iAge=36;dHeight=170;dWeight=65;}20创立对象1.创立对象的步骤在已经定义好的类的根底上,创立对象的过程分为如下3步:〔1〕创立对象引用变量;〔2〕创立类的实例对象;〔3〕将对象的引用赋值给对象引用变量。21创立对象2.new运算符通过new运算符创立对象时,Java虚拟机将在堆中开辟一个内存空间,用于存放对象的实例变量,并根据指定的构造方法和类的定义初始化这些实例变量。new运算符的一般格式为:对象引用变量=new对象构造方法;3.调用对象的成员对象的成员〔实例变量与实例方法〕的调用采用“.”运算符,引用的一般格式为:对象引用变量.类的成员22类的继承

在Java中,从一个现有类的根底上定义新的类的过程称为派生。新定义的类称为派生类,也称为直接子类。根底类称为父类或超类。这种一个类派生出另一个类的关系即为继承关系,一个派生类将继承其父类的所有特性和操作。如果要创立一个继承父类的子类,只需在类的声明中通过extends关键字指定要继承的类名就可以。23

课堂演示-编写描述大学生的Java类

【案例4-2】编写描述大学生的Java类【案例学习目标】理解继承的根本思想,理解父类和子类的关系,能在父类的根底上创立子类【案例知识要点】父类和子类的概念、子类的实现、extends关键字【案例完成步骤】编写程序编译并运行程序24

课堂演示-编写描述大学生的Java类

编写程序publicclassCollegeextendsStudent{ privateStringsMajor; publicvoidgetMajor(){ System.out.println("专业:"+sMajor);//调用子类的实例变量

System.out.println("身高:"+dHeight);//引用父类的实例变量

} publicstaticvoidmain(String[]args){ Collegewangym; wangym=newCollege(); wangym.getInfo();//调用父类的实例方法

wangym.getMajor();//调用子类的实例方法

}}

25

课堂演示-编写描述大学生的Java类

运行结果26学生模仿--2任务一:学生模仿完成【案例4-2】的内容27教师示范与讲解--3任务一:方法重载与方法重写案例分析28

this和superthis代表当前对象本身。通过this变量不仅可以引用当前对象的实例变量,也可引用当前对象的实例方法;但由于类变量与类方法不属于具体的类对象,因此不能通过this变量引用类变量和类方法,在类方法中也不能使用this变量。在引用实例变量时,使用this变量是一种很好的习惯,它能使程序更加清晰,且不容易出错。super代表当前类的父类。通过super可以调用父类的构造方法和父类的成员〔成员变量和成员方法〕。29方法重载与方法重写

方法重载指类的同名方法在向其传递不同的参数时可以有不同的动作,实现不同的功能子类从父类中继承方法时,需要修改父类中定义的方法〔即只修改方法体,方法的参数类型、个数、顺序以及返回值保持相同〕,这就是方法的重写30

课堂演示——方法重载与方法重写

【案例4-3】方法重载与方法重写【案例学习目标】理解方法重载的含义和应用场合,理解方法重写的含义和应用场合,掌握实现方法重载的方法,掌握实现方法重写的方法,能在实际应用中合理选择方法重载或方法重写。

【案例知识要点】方法重载的含义、方法重写的含义、方法重载的方法、方法重写的方法。

【案例完成步骤】编写程序

编译并运行程序31

课堂演示-方法重载与方法重写

编写方法重载的程序publicclassOverLoadDemo{ voidpurchase(){ System.out.println("买菜"); } voidpurchase(Stringwhat){ System.out.println("买"+what); } voidpurchase(Stringwhat,intnumber){ System.out.println("买"+number+"斤"+what); } voidpurchase(Stringwhat,Stringwhere){ System.out.println("到"+where+"买"+what); }32

课堂演示-方法重载与方法重写

voidpurchase(Stringwhat,intnumber,Stringwhere){ System.out.println("到"+where+"买"+number+"斤"+what); } voidpurchase(Stringwhat,intnumber,Stringwhere,Stringwhen){ System.out.println(when+"到"+where+"买"+number+"斤"+what); } publicstaticvoidmain(Stringargs[]){ OverLoadDemoold=newOverLoadDemo(); old.purchase(); old.purchase("大米"); old.purchase("大米",100); old.purchase("大米","步步高超市"); old.purchase("大米",100,"步步高超市"); old.purchase("大米",100,"步步高超市","下午"); }}33

课堂演示-方法重载与方法重写

方法重载运行结果34

课堂演示-方法重载与方法重写

编写方法重写的程序

classStu{ StringsName; voiddisplay(Stringname){ System.out.println("我是一名学生,我的名字是:"+name); }}classCollegeStuextendsStu{ StringsMajor; voiddisplay(Stringname){ System.out.println("-------------------------"); System.out.println("我是一名大学生,我的名字是:"+name); sMajor="计算机"; System.out.println("我学习的专业是:"+sMajor); }}35

课堂演示-方法重载与方法重写

classMiddleStuextendsStu{ StringsSubject; voiddisplay(Stringname){ System.out.println("-------------------------"); System.out.println("我是一名中学生,我的名字是:"+name); sSubject="理科"; System.out.println("我学习的科目是:"+sSubject); }}36

课堂演示-方法重载与方法重写

publicclassOverrideDemo{ publicstaticvoidmain(Stringargs[]){ Stustu=newStu(); CollegeStucstu=newCollegeStu(); MiddleStumstu=newMiddleStu(); Stus; s=stu; s.display("刘津"); s=cstu; s.display("王咏梅"); s=mstu; s.display("刘志成"); }}37

课堂演示-方法重载与方法重写

方法重写运行结果38学生模仿--3任务一:学生模仿完成【案例4-3】的内容39教师示范与讲解--4任务一:编写定义形状的程序案例分析40抽象类与抽象方法

在面向对象分析设计时,可将一些实体作高度抽象定义成抽象类。抽象类没有任何对象,只可作为一个模板用于创立子类,以及为面向对象提供更灵活的多态机制抽象类定义的一般格式如下:[public]abstractclass类名[extends父类名][implements接口名表]{方法体;}41抽象类与抽象方法

抽象类的声明,必须在class关键字之前添加abstract关键字。抽象类与其他类一样,可继承于其他类,也可实现接口。但定义抽象类的主要目的就是为了创立子类,因此abstract类不可以是final类。抽象类中可以不包含抽象方法,但包含抽象方法的类必须是抽象类。抽象方法声明的一般格式如下:[存取修饰符]abstract[方法返回类型]方法名〔[形式参数表]〕[throws异常表];42

Final修饰符出于保密或其他设计上的原因,希望类或类中成员变量、成员方法不被修改或重写,可以通过Java提供的final修饰符来实现在类定义时,可使用final修饰符使类不被继承在定义成员变量时,可通过final修饰符定义常量在定义方法时,可使用final修饰符防止方法被子类重写43

课堂演示-定义形状

【案例4-4】定义形状

【案例学习目标】了解抽象类的定义方法,掌握由抽象类得到具体类的方法,能根据实际应用编写抽象类和具体类

【案例知识要点】抽象类的定义、抽象类和具体类的关系、abstract关键字

【案例完成步骤】编写程序

编译并运行程序

44

课堂演示-定义形状

编写程序abstractclassShape{ publicabstractvoidgetArea();}classCircleextendsShape{ finaldoublePI=3.1415926; doubledRadius; publicvoidgetArea(){ System.out.println("圆的面积为:"+PI*dRadius*dRadius); } publicCircle(doubler) { this.dRadius=r; }}45

课堂演示-定义形状

classRectangleextendsShape{ doubledLength; doubledWidth; publicvoidgetArea(){ System.out.println("矩形的面积为:"+dLength*dWidth); } publicRectangle(doublel,doublew){ this.dLength=l; this.dWidth=w; }}publicclassAbstractDemo{ publicstaticvoidmain(Stringargs[]){ Circlecc=newCircle(5.6); cc.getArea(); Rectanglert=newRectangle(8,6); rt.getArea(); }}46

课堂演示-定义形状

运行结果47学生模仿--4任务一:学生模仿完成【案例4-4】的内容48教师示范与讲解--5任务一:编写实现电视机遥控器的程序案例分析49接口定义

接口被描述为一组方法声明和常量的集合接口只定义一组方法协议〔或称标准〕,但没有作任何具体实现。接口的定义与类的定义相似,其一般格式为:[public]interface接口名[extends父辈接口列表]{常量定义方法声明}50实现接口

实现接口的定义格式如下:[public][abstract][final]class类名[extends父类名]implements接口名表{//接口体内容1//接口方法实现//接口体内容2}与普通类的定义不同,接口实现必须包含“implements接口名表”局部在实现类中,一般必须重写接口中声明的所有方法。重写方法的名称、返回值、修饰符必须与接口中声明的方法一致。51

课堂演示-实现电视机遥控器

【案例4-5】实现电视机遥控器【案例学习目标】进一步理解继承和多继承的含义,掌握接口声明的方法,掌握接口体定义的方法,会根据实际应用编写接口

【案例知识要点】接口声明、接口体定义、使用接口、interface关键字

【案例完成步骤】编写接口程序

编写实现接口的程序

编写测试接口的主类

运行程序

52

课堂演示-实现电视机遥控器

编写接口程序interfaceIRemoteCtrl{intVOLUME_MIN=0;intVOLUME_MAX=100;booleanpowerOnOff(booleanb);//电源开关

intvolumeUp(intincrement);//声音放大

intvolumeDown(intdecrement);//声音减小

voidmute();//静音}53

课堂演示-实现电视机遥控器

编写实现接口的程序〔见书本〕编写测试接口的主类publicclassTestTvCtrl{ publicstaticvoidmain(String[]args){ TVRemoteCtrltv=newTVRemoteCtrl("海尔H600"); tv.powerOnOff(true); //tv.powerOnOff(false); tv.setChannel(45); tv.channelDown(); tv.mute(); tv.volumeUp(2); tv.volumeUp(3); }}54

课堂演示-实现电视机遥控器

运行结果55学生模仿--5任务一:学生模仿完成【案例4-5】的内容56教师示范与讲解--6任务一:编写读取队列元素的程序案例分析57定义包

在Java语言中,与客观世界中系统相对应的概念称为包〔Package〕。包是一种分组机制,设计者可将一组高内聚、低耦合、关联性较强的模型元素〔可以是类、接口、包〕组织在一起,形成一个更高层次的单元包由一组类和接口组成。它是管理大型名字空间,防止名字冲突的工具。每一个类和接口的名字都包含在某个包中。使用包的作用有两个:一是划分类名空间,二是控制类之间的访问。定义包的一般格式如下:packagepackageName;58引入包

在一个类中,如果要使用其他包中的类和接口那么用import关键词来标明来自其他包中的类。Java提供import关键词来引用包,指定包的名字,包括路径名和类名,用“*”匹配符可以调入多个类。通常一个类只能引用与它在同一个包中的类,如果需要使用其他包中的public类,那么可以使用如下的几种方法。在要使用的类前加包名用import关键字加载需要使用的类用import关键字加载整个包设置CLASSPATH环境变量59

Java常用类库编号包名功能1java.awt包含了图形界面设计类、布局类、事件监听类和图像类2java.io包含了文件系统输入/输出相关的数据流类和对象序列化类3java.lang包含对象、线程、异常出口、系统、整数和字符等类的Java编程语言的基本类库4包含支持TCP/IP网络协议类、Socket类、URL类等实现网络通信应用的所有类5java.util包含程序的同步类、Date类和Dictionary类等常用工具包6javax.swing包含了一系列轻量级的用户界面组件(swing组件)类7Java.sql包含访问和处理来自于Java标准数据源数据的相关类(JDBC类)8java.applet包含了设计applet的类9java.beans.*提供了开发JavaBeans需要的所有类10java.math.*提供了简明的整数算术以及十进制算术的基本函数11java.rmi提供了与远程方法调用相关的所有类12java.security.*提供了设计网络安全方案需要的一些类13java.test包括以一种独立于自然语言的方式处理文本、日期、数字和消息的类和接口14javax.accessibility定义了用户界面组件之间相互访问的一种机制15javax.naming.*为命名服务提供了一系列类和接口60数组与字符串

数组是一种常用的数据结构,相同数据类型的元素按一定顺序排列就构成了数组。数组中的各元素是有先后顺序的,它们在内存中按照这个先后顺序连续存放在一起。数组有一个成员变量length来说明数组元素的个数。创立一个空数组。intlist[]=newint[5];用初始数值填充数组。Stringnames[]={"liujin","wangym","Liuzc"};61一维数组

声明一个数组其实就是要确定数组名、数组的维数和数组元素的数据类型。声明数组的语法格式有两种:数组元素类型数组名[];或数组元素类型[]数组名;声明数组后,要想使用数组需要为它开辟内存空间,即创立数组空间。创立数组空间的语法格式为:数组名=new数组元素类型[数组元素的个数];在声明数组时“[]”中不允许指定数组元素的个数,如intiSno[6]将导致语法错误。正确区分“数组的第5个元素”和“数组元素5”很重要,因为数组下标从0开始,“数组的第5个元素”的下标是4,而“数组元素5”的下标是5,实际是数组的第6个元素当数组初始化后就可通过数组名与下标来引用数组中的每一个元素。一维数组元素的引用格式如下:数组名[数组下标]62二维数组

二维数组的声明与一维数组相似,只是需要给出两对方括号。格式如下:类型标识符数组名[][];或类型标识符[][]数组名;在初始化二维数组时,可以只指定数组的行数而不给出数组的列数,每一行的长度由二维数组引用时决定,但不能只指定列数而不指定行数不指定行数只指定列数是错误的63

课堂演示-读取队列元素

【案例4-6】读取队列元素【案例学习目标】了解数组的含义,掌握数组的定义方法,掌握数组的赋值方法,掌握数组元素的引用方法,在实际编程中能够合理地使用数组

【案例知识要点】一维数组的定义、一维数组的赋值、一维数组元素的引用

【案例完成步骤】编写程序

编译并运行程序

64

课堂演示-读取队列元素

编写程序publicclassQueue{ publicstaticvoidmain(String[]args){ inti; inta[]=newint[5]; for(i=0;i<5;i++){ a[i]=i; } for(i=a.length-1;i>=0;i--){ System.out.println("a["+i+"]="+a[i]); } }}65

课堂演示-读取队列元素

运行结果66学生模仿--6任务一:学生模仿完成【案例4-6】的内容67教师示范与讲解--7任务一:编写操作字符串的程序案例分析68

String类字符串是程序中的一个通用且重要的信息类型,在程序中经常要把各种各样的信息以字符串的形式传递、通信和输出显示,而Java为字符串操作提供了许多特殊的支持。69

StringBuffer类StringBuffer是字符串类String的对等类,提供了大量的字符串功能。String表示定长、不可变的字符序列,而StringBuffer表示变长的和可修改的字符序列,可用于动态创立和操作动态字符串信息。StringBuffer支持字符或子字符串的插入或追加的操作,并可针对这些字符或子字符串的添加而自动地增加空间。70

课堂演示-操作字符串

【案例4-7】操作字符串【案例学习目标】了解String对象和StringBuffer对象的异同,掌握String对象的构造方法,掌握StringBuffer对象的构造方法,在实际开发中能够合理使用String对象或StringBuffer对象提供的相关方法完成字符串

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论