1教案首页周次日期课时序课题面向对象程序设计(本章是重点)教学目的要求理解面向对象的宏观理论;Java的面向对象特性;方法和异常的处理重点类的概念;继承及权限;接口;包;方法的定义、调用难点类的概念理解;继承及权限;接口,对象实例与类区别教学过程设计及时间分配第五章面向对象程序设计(3*45)第一节类(class)(45‘)第二节类的继承(inheritance)(20’)第三节接口(interface)(20‘)第四节包(package)(20‘)第五节综合举例(30‘)教学场所或教学方法使用教具作业课后记授课教师2第五章面向对象程序设计前面介绍了Java语言的基本数据类型,并且简单的介绍了相关Java复合类型的相关原理。本章将完整地介绍Java语言中重要的自定义的复合数据类型—类,以及与之相关的对象、接口和包等概念及其使用情况。5.1类(class)Java语言作为一种面向对象的程序设计语言,具备面向对象技术的基本属性。对象是组成面向对象技术的一个基本概念。类是组成Java程序的基本元素,它封装了一系列的变量和方法,是一类对象的原型。类:包含数据变量和方法,是对事物的抽象表示。对象:实例化一个类(内存分配),得到类的对象。5.1.1类定义类定义的一般形式语句:[modifier]classNameOfClass[extendsSuper][implementsinterfaces]{membervariabledeclarations;//成员变量声明methoddeclarations;//方法成员声明}Java语言中的类与C语言中的struct—结构类似,不过结构没有方法成员,只有数据变量成员。类名的第一个字母一般为大写。如果修饰符modifier为public,则此类声明的文件名称需要与类名称完全一致。关键字:modifierclassextendsimplements,modifier是修饰此类的访问范围,一般有public或者省略;class修饰类名前;extends当要继承父类时使用,而且在一个类中,不能出现多个extends;implements在执行接口时使用,而且在一个类声明中,可以有多个。对任何一个类,都是继承Object类。3讲授一个范例。/*Rectangle.java*/publicclassRectangle{/***构造函数*@paramw宽*@paraml长*/publicRectangle(Stringname,doublew,doublel){rectNameStr=name;width=w;length=l;}/***面积方法*@return得到长方形的面积*/publicdoublearea(){returnlength*width;}/***设置长方形的长和宽*@paramw宽*@paraml长*/publicvoidsetDim(doublew,doublel){width=w;4length=l;}//数据变量publicStringrectNameStr;//长方形的命名privatedoublelength;//长protecteddoublewidth;//宽}讲授要点:下面要点只要给学生一个印象就可以,因为以后会着重讲授构造函数简单说明public,private,protected等的简单说明。写程序时,注释很重要,要有条理。5.1.2类对象一旦定义了所需要的类,就可以创建该类的对象变量,创建类的对象变量称为类的实例化,类的实例化也称为JVM对类的内存分配。类的对象是在程序运行中创建生成的,其所占的空间在程序运行中动态分配。当一个类的对象完成了它的使命,JVM将自动回收刚才为其分配的内存空间。A:创建对象ObjectName=newClassName(…)用new运算符;方法中有无参数看构造函数。例如:Rectanglerect=newRectangle(“myRect”,15.8,45.5);JVM自动为其分配内存空间。只有用new,JVM才能会给复合数据类型分配内存空间。讲授一下机制:rect有一块空间存放“引用地址”B:引用对象创建了对象后,就可以对对象的各个成员进行访问,进行各种处理。ObjectName.fieldName或者objectName.methodName(…);在外面调用,只有对类中的public属性的数据变量或者方法调用。5例如:Rectanglerect=newRectangle(“myRect”,15.8,45.5);rect.RectNameStr;doublearea=rect.Area();总结一个范例:publicclassRectangle{/***构造函数*@paramw宽*@paraml长*/publicRectangle(Stringname,doublew,doublel){rectNameStr=name;width=w;length=l;}/***面积方法*@return得到长方形的面积*/publicdoublearea(){returnlength*width;}/***设置长方形的长和宽*@paramw宽*@paraml长*/publicvoidsetDim(doublew,doublel){6width=w;length=l;}//程序从main方法启动publicstaticvoidmain(String[]args){Rectanglerect=newRectangle(myRect,15.8,45.5);StringrectNameStr=rect.rectNameStr;doublerectArea=rect.area();System.out.println(rect'snameis:+rectNameStr);System.out.println(rect'sareais:+rectArea);}//数据变量publicStringrectNameStr;//长方形命名privatedoublelength;//长protecteddoublewidth;//宽}5.1.3方法的使用(从第3章中带入)Java中的方法和C语言中的函数性质一样。5.1.3.1方法的定义与调用A:方法的定义格式:[modifier]returnTypemethodName([parameterlist]){…//方法体}要点:modifier可以为publicstaticprivteprotected等returnType为返回类型,与C语言相同,返回可以为基本类型或者复合类型7methodName为方法名称,类似C语言中的函数名称parameterlist为参数,可以有,也可以没有范例:上面的例子中的publicvoidsetDim(doublew,doublel){width=w;length=l;}B:方法的调用要点:实际参数要与形式参数相同要由对象或类名加”.”来调用。5.1.3.2方法调用中的数据传送几种方式:值传送方式、引用传递方式、返回值方式、实例变量和类变量传送方式。值传送方式:被调方法对形参的计算,加工与对应的实际参数已经完全脱离关系。例如:voidtest(intb){b=b+9;}调用:inta=9;test(a);//a的值将不会被b所影响引用传递方式:方法的参数为复合类型,任何对形式参数的改变都会影响到对应的实际参数。Voidtest(StringBufferb){b.append(‘T’);}8调用如下:StringBuffera=newStringBuffer(“China”);test(a);//此时,a的对象变成”ChinaT”;返回值方式:方法调用后的值。例如:inttest(){return9;}现有:intresult=test();5.1.3.3方法和变量的作用域作用域即为变量或方法的有效使用范围,这里只介绍变量的作用域。Java语言中变量的作用域与C语言的变量作用域概念相同。范例:publicclassA{intx=8;voidf(){intx=6;System.out.println(“x=”+x);}}输出为:x=6第二个x把第一个x屏蔽了,第二个x变量的生命周期是在这个f()方法内。5.1.3.4方法的嵌套和递归调用A:方法的嵌套在一个方法的实现部分又调用了另外的方法,则称为方法的嵌套调用。PublicclassTest{Publicinta(){Return9;}9publicvoidb(){intresult=a();System.out.println(result);}}B:方法的递归在一个方法中有调用该方法自身的情况,称为方法的递归。即方法自己调用自己。PublicclassTest{Publiclongtest(intn){If(n1)Returnn*test(n-1);ElseReturn1;}}5.1.3.5方法的重载Java语言允许在一个类中定义几个同名的方法,但要求这些方法具备不同的参数集合(方法参数的个数、类型、顺序有一个要不同)。这种做法称为方法的重载。注意:不能根据返回类型来判定重载。如:publicinta(){}publicdoublea(){}这样会出现错误。讲述书上3.24范例。5.1.4构造方法在Java中,任何变量在被使用前都必须先设置初值。Java提供了为类的成员10变量赋初值的专门功能:构造方法。构造方法是一种特殊的成员方法,它的特殊性有如下:构造方法名与类名相同。构造方法不返回任何值,也没有返回类型。每一个类可以有零个或多个构造方法。构造方法在创建对象时自动执行,一般不能显式地直接调用。5.6例题:/*RectConstructor.java*/publicclassRectConstructor{publicdoublelength;publicdoublewidth;publicdoublearea(){returnlength*width;}publicRectConstructor(doublel,doublew){length=l;width=w;}}/*RectDemo3.java*/publicclassRectDemo3{publicRectDemo3(){}publicstaticvoidmain(String[]args){RectConstructorrect1=newRectConstructor(10,20);RectConstructorrect2=newRectConstructor(3,6);doublear;ar=rect1.area();//11System.out.println(第一个长方形的面积:+ar);ar=rect2.area();System.out.println(第二个长方形的面积:+ar);}}没有参数的构造方法叫无参数构造方法,一个类如果没有提供用户自定义的构造方法,Java会提供一个空无参数构造方法。可如果用户定义了构造方法,此时,Java提供的默认无参数构造方法将被废弃。无参数构造方法:publicclassA{publicintdata;};创建此类对象:Aa=newA();//无参数用户自定义构造方法:publicclassA{publicintdata;publicA(intdata){this.data=data;}}创建此类对象:Aa=newA(3);而Aa=newA();将会报错。构造方法的重载:当一个类中有多个构造方法时,创建对象时,构造方法可以由用户选择。PublicclassA{Publicintdata=9;PublicA(){}publicA(intdata){this.data=data;}12}创建对象时:Aa=newA();此时调用无参构造方法,所以data为9;Aa=newA(3);此时调用有参数构造方法,所以data为3;讲授this指针5.1.5类和成员的修饰符在类和类的成员定义时,可以