《Java程序设计》课件-javaCP5面向对象程序设计的基本知识_第1页
《Java程序设计》课件-javaCP5面向对象程序设计的基本知识_第2页
《Java程序设计》课件-javaCP5面向对象程序设计的基本知识_第3页
《Java程序设计》课件-javaCP5面向对象程序设计的基本知识_第4页
《Java程序设计》课件-javaCP5面向对象程序设计的基本知识_第5页
已阅读5页,还剩43页未读 继续免费阅读

下载本文档

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

文档简介

第五章面向对象程序设计的基本知识

Java程序设计本章主要内容

面向对象设计的基本常识类和对象继承特别的类接口包和名称空间2024/12/24李飞——计算中心2/485.1面向对象设计的基本常识抽象过程(万物皆可成为对象)对象:是对个体事物的抽象类:是对同种事物集合的抽象属性:是对现实世界中个体中特征的抽象。方法:是对现实世界中某类事物的动态特征(行为)的抽象,是对象所能执行的操作。方法描述了对象执行操作的算法。事件:是对对象状态发生变化的一种抽象。消息:是对“现实世界通知”的一种抽象,它由事件触发并由系统自动发送到所有对象。2024/12/24李飞——东北大学秦皇岛分校计算中心3/48面向对象的程序设计的优点

与人类习惯的思维方式相一致。稳定性好。代码的重用性大大提高可维护性好更适于开发大型软件产品2024/12/24李飞——东北大学秦皇岛分校计算中心4/48面向对象程序设计的特征封装性继承性多态性2024/12/24李飞——东北大学秦皇岛分校计算中心5/48封装性Java的封装性是通过类和对象来实现的。类的定义是对事物特性的详细描述。事物的特性包括静态特性和动态特性。事物的静态特性通过类中的成员变量来描述动态特性通过定义在类中的方法来描述。2024/12/24李飞——东北大学秦皇岛分校计算中心6/48继承性继承是一种由已有的类创建新类的机制。Java的继承通过接口、类和对象来完成。父类:被继承的类称为“父类”、“基类”或“超类”。子类:继承其它类的类称为“子类”。接口:没有类的实现部分的特殊类被称为接口。对象:根据类生成的个体被称为对象。Java支持类之间的单继承。一个子类可以继承多个接口。一个类可以生成多个对象。一个对象封装了生成他的类的所有内容。子类可以继承父类或接口的中除了私有的方法和成员变量外的所有内容。2024/12/24李飞——东北大学秦皇岛分校计算中心7/48多态性多态性:是指同一个方法或运算符在不同的条件和情况下具有不同的功能和处理形式,即一个方法具有多种含意。实现多态的手段:方法的重载:同一个类中同名不同功能的多个方法。方法的重构:在子类中重写父类中的同名方法抽象类实现:在子类中实现抽象类或接口中的同名方法。2024/12/24李飞——东北大学秦皇岛分校计算中心8/48在子类中调用父类方法或成员变量的方法super.方法名(参数表);调用当前类的方法This.方法名(参数表)或方法名(参数表)2024/12/24李飞——东北大学秦皇岛分校计算中心9/485.2类和对象类类的定义对象对象的声明对象的定义对象的初始化和赋值对象的访问2024/12/24李飞——东北大学秦皇岛分校计算中心10/35类的定义

class是类声明的保留字。“类说明修饰符”是public、abstract和final三个保留字中的一个。

public:则表明用户定义的类是一个公共类,在一个Java程序文件中可以有若干个类,但只能有一个公共类

abstract:则说明用户定义的类是一个抽象类,抽象类无法用new运算符生成实例化的对象 final:则说明用户定义的类是最终类,最终类是不可继承的。extends子句:用于说明该类的父类。Java仅支持单继承,因此extends保留字后只能有一个父类的名称。Implements子句:说明将在本类中实现的接口。2024/12/24李飞——东北大学秦皇岛分校计算中心11/35类的定义成员变量的声明与初始化修饰符可以是:public、private、protected、static、final。public:表示成员变量是公有的,此类成员变量可以被类中的所有方法和其他类中的方法访问。private:表示成员变量是私有的,仅被当前类的方法访问和使用。protected:表示成员变量是保护类型的,此类成员变量可以被当前类和它的子类中的语句访问。static:表示成员变量是静态变量或类变量。可以通过”类名.变量名”的形式被其他类访问。非static修饰的变量仅能通过“对象名.成员变量名”的形式访问。final:表示成员变量的值一旦定义不可更改,我们可以把用final修饰的成员变量当成常量来用。2024/12/24李飞——东北大学秦皇岛分校计算中心12/35[修饰符]成员变量类型

成员变量名列表;或[修饰符]成员变量类型

成员变量名=成员变量初始值表达式;类的定义成员方法的定义成员方法修饰符:public、private、protectedstatic、final、abstract和synchronized返回值类型:各种数据类型成员方法名:Java标识符参数列表和异常列表:以“,”隔开的参数和异常名。2024/12/24李飞——东北大学秦皇岛分校计算中心13/35类的定义构造方法定义构造方法是类中的一种特殊的方法。它的功能是在通过new运算符创建类的实例对象时,初始化对象。构造方法与普通方法的不同构造方法的方法名必须和类名相同,且只有构造方法名可以与类名相同。构造方法没有返回值类型,因为构造方法的返回值类型就是类本身。如果一个类中没有用户声明的构造方法,则系统将提供缺省的构造方法,缺省构造方法没有参数,也没有具体的语句,不完成任何操作。如果一个类中包含了构造方法的说明,则系统不再提供缺省的构造方法。这是通过new运算符创建该类的实例对象时调用的构造方法的实参必须和构造方法的形参相一致。构造方法只能在创建类的实例对象时,通过new运算符引用。2024/12/24李飞——东北大学秦皇岛分校计算中心14/35例5.1:创建一个学生类publicclassStudent{ Stringname,education,department; booleansex=false; intage; privatedoubleheight,weight; publicstudent(){//没有参数的构造方法

name=newString(); education=newString("大学本科"); department="计算机应用技术"; intage=18; height=160; weight=57.3;

}2024/12/24李飞——东北大学秦皇岛分校计算中心15/35 publicstudent(Stringn){//带姓名参数的构造方法

name=n; education=newString("大学本科"); department="计算机应用技术"; intage=18; height=160; weight=57.3; }2024/12/24李飞——东北大学秦皇岛分校计算中心16/35 publicdoublegetHeight(){ returnheight; } publicvoidsetHeight(doubleheight){ this.height=height; } publicdoublegetWeight(){ returnweight; } publicvoidsetWeight(doubleweight){ this.weight=weight; }}2024/12/24李飞——东北大学秦皇岛分校计算中心17/35对象生成对象的步骤声明对象。对象的声明就是给对象命名,同时通知Java的编译系统,对象所占内存空间大小。实例化对象。实例化对象是Java创建对象的过程。实例化对象时,Java会为对象分配必要的内存空间,用来保存对象的数据和成员方法的代码。同时,Java会为每个实例化的对象分配一个“引用”句柄,并把这个“引用”保存到一个变量中。“引用”实际上是一个指针,此指针指向对象所占有的内存区域。初始化对象。对象的初始化是为对象的成员变量赋初值。初始化对象的过程是通过类的构造方法来实现的。一个类可以提供多种构造方法,以便对新对象按不同要求进行初始化。2024/12/24李飞——东北大学秦皇岛分校计算中心18/35对象相关语句对象声明语句[修饰符]类名对象名;和[修饰符]类名对象名列表;实例化对象语句new类的构造方法([参数列表]);对象名=new类的构造方法([参数列表]);[修饰符]类名对象名=new类的构造方法([参数列表]);2024/12/24李飞——东北大学秦皇岛分校计算中心19/35给对象赋值对象名引用=被访问对象的引用;访问对象的语句对象名.成员变量名;对象名.成员方法名([参数列表]);2024/12/24李飞——东北大学秦皇岛分校计算中心20/35例5.2:编写一个Shape类,使其具有计算园面积和矩形面积的功能。publicclassShape{ doubler=0.0; doublea=0.0,b=0.0; publicShape(doubler){ this.r=r;//私有成员变量的赋值

} publicShape(doublewidth,doubleheight){ a=width; b=height; } publicdoublegetRound(){ returnMath.PI*r*r;//调用API中Math类的类变量

}2024/12/24李飞——东北大学秦皇岛分校计算中心21/35publicdoublegetRectangle(){ returna*b; } publicstaticvoidmain(String[]args){ Shaperectangle;//声明对象rectangle Shaperound=newShape(5);//声明并初始化对象round rectangle=newShape(5,4);//创建并初始化对象rectangle System.out.println("圆面积为:"+round.getRound());//调用成员方法

System.out.println("矩形面积为:"+rectangle.getRectangle()); }}2024/12/24李飞——东北大学秦皇岛分校计算中心22/35参数传递问题参数传递:调用方法时要给出与形式参数个数相同、类型一致的实际参数。这样Java在执行方法时,才会把实际参数准确的传递给形式参数,进而使方法能够得以执行。而这个实际参数和形式参数结合的过程被称为参数传递。2024/12/24李飞——东北大学秦皇岛分校计算中心23/35参数传递(1)在调用重载的方法或构造方法时。系统将首先根据给出的实参寻找形参类型与其完全匹配的方法和构造方法,如果找到,就执行它,如果没有找到,系统将按照如下原则对实参进行类型转换,直到找到一个方法。参数传递过程中对于简单数据类型,首先由低级向高级逐级转换,即byte、short、int、long、float、double,直到找到合适的方法。当上述转换不能满足要求时,编译将出错。布尔类型不能进行转换。对于引用数据类型,只能将子类转换为父类,而不能逆向转换。2024/12/24李飞——东北大学秦皇岛分校计算中心24/35参数传递(2)按值传递参数Eg5.3如果方法中的参数为基本数据类型,如int、double、char等,那么参数的传递属于按值传递。在调用方法时,系统为形参另外开辟出专门的内存空间,实参的值被传递给形参并存储在形参的内存空间中。方法的执行过程中,如果对参数的值做出了改变,也只是修改了形参存储空间中所存储的的值,对实参并无影响。按引用传递eg5.4当参数为对象、数组、字符串等引用数据类型时,参数的传递方式则为按引用传递。系统并没有为形参开辟新的内存空间,而是将实参的引用传递给形参,形参和实参共用一块内存空间,任何对形参的操作同时也是对实参的操作。2024/12/24李飞——东北大学秦皇岛分校计算中心25/35在使用类时的多态性问题赋值兼容原则规定,在继承中允许向上赋值但不允许向下赋值。类的变量允许指向本类的实例,也可以指向其子类或后代类的实例。反过来是不允许的,即类的变量不能指向祖先类的实例。2024/12/24李飞——东北大学秦皇岛分校计算中心26/35转换对象引用时的原则:

沿继承层次向“上”转换总是合法的。例如,把Teacher引用转换为Person引用。此种方式下不需要转换运算符,只用简单的赋值语句就可完成。

对于向“下”转换,只能是父类到子类转换,其他类之间是不允许的。例如,把Student引用转换为Teacher引用肯定是非法的,因为Student类和Teacher类之间没有继承关系。程序中可使用instanceof来判别对象的实际类型。2024/12/24李飞——东北大学秦皇岛分校计算中心27/355.3继承Java支持类之间的单继承。多继承由接口实现。Object类是所有类的父类。无论一个类有没有明确指定父类,都可看作是从Object类直接或间接派生来的。Object类包含了所有Java类的公共属性,这个类中定义的方法可以被任何类的对象使用和继承。继承关系具有传递性。2024/12/24李飞——东北大学秦皇岛分校计算中心28/35继承方法功能getClass()获取当前对象所属的类的信息,返回Class对象。toString()按字符串对象返回当前对象本身的有关信息。equals(Objectobj)比较当前对象和obj对象是否为同一个对象,是返回true。clone()生成当前对象的一个副本,并返回这个对象的副本对象2024/12/24李飞——东北大学秦皇岛分校计算中心29/35和继承相关的保留字This:指代当前类。在构造方法和成员方法中,this用来表示引用当前对象,也就是被调用的方法或构造方法所属的对象和类。通过使用this保留字,可以在方法中引用当前类和当前对象的任何成员。Super:指代当前类的父类如果定义的类是某个类的子类,且在类定义中重写了一些与其父类相同名称的方法。且在当前类的定义中,需要使用父类的同名方法或成员变量。就需要使用super保留字来进行引用2024/12/24李飞——东北大学秦皇岛分校计算中心30/35例5.6:this保留字的使用。

2024/12/24李飞——东北大学秦皇岛分校计算中心31/35publicclasseg5_6{ doubler=0,a=0,b=0,s=0; publiceg5_6(doubler){ this.r=r; s=Math.PI*r; } publiceg5_6(doublea,doubleb){ this.a=a; this.b=b; s=a*b;

}publiceg5_6(){this(4,5);

} publicdoublegetS(){ returnthis.s; } publicstaticvoidmain(String[]args){ eg5_6eg1=neweg5_6(3); eg5_6eg2=neweg5_6(3,4); eg5_6eg3=neweg5_6(); System.out.println(eg1.getS()); System.out.println(eg2.getS()); System.out.println(eg3.getS()); }}2024/12/24李飞——东北大学秦皇岛分校计算中心32/35例5.7:super保留字的使用。publicclasseg5_7extendseg5_6{ doubletriangle=0; publiceg5_7(){ super(); triangle=super.getS()/2; } publiceg5_7(doublea,doubleb){ super(a,b); triangle=super.getS()/2; } publicstaticvoidmain(String[]args){ eg5_7eg1=neweg5_7(); eg5_7eg2=neweg5_7(3,4); System.out.println(eg1.triangle); System.out.println(eg2.triangle); }}2024/12/24李飞——东北大学秦皇岛分校计算中心33/355.4特别的类抽象类抽象类是用来表示抽象概念的类,它不可被实例化。内部类在Java中,定义一个类成为另外的类的成员。这种在类中定义的类称为内部类。嵌套类:静态(用Static定义)的内部类。最终类:用final定义的类匿名类:没有名字的类2024/12/24李飞——东北大学秦皇岛分校计算中心34/35抽象类抽象类的定义方法抽象方法:是指用abstract修饰的仅有方法声明,没有实现方法体的方法。如定义一个求面积的抽象方法getS()publicabstractdoublegetS();//抽象方法输出面积2024/12/24李飞——东北大学秦皇岛分校计算中心35/35abstractclass抽象类名{……成员方法;抽象方法;}内部类和嵌套类内部类可以像成员变量或成员方法一样访问其外部类的成员变量和方法。内部类的实例对象通常只能在其外部类的范围内使用。当内部类被Static定义时,可以通过“外部类名.内部类名”的形式调用。例5.9,例5.102024/12/24李飞——东北大学秦皇岛分校计算中心36/35最终类最终类的定义格式finalclass最终类类名{……}最终类不可被继承。2024/12/24李飞——东北大学秦皇岛分校计算中心37/35匿名类当我们在一个类中定义的内部类仅使用一次时,我们可以把类的定义和实例化的语句结合在一起书写。由于通过这种方法定义的类仅实例化一次,就不需要为实例命名,因此定义的内部类也就没有名称。这种没有名字的内部类被称为匿名类。匿名类通常将类的描述写在一个语句或表达式中。这样的语句有两重含义,一是定义一个匿名类,二是创建了一个该类的对象。例5.122024/12/24李飞——东北大学秦皇岛分校计算中心38/355.5接口定义接口就是一系列常量和方法协议的集合,它提供了多个类共同行为的界面,但不限制每个类如何实现这些方法。特点只有常量和方法协议。不可被实例化为对象。可被多重继承。只有在其子类中把所有方法都重写后,才可对该子类实例化.2024/12/24李飞——东北大学秦皇岛分校计算中心39/35接口的定义[接口修饰符]interface接口名称[extends父接口名]{静态常量方法原型说明}2024/12/24李飞——东北大学秦皇岛分校计算中心40/35接口修饰符:public,不写默认public接口的实现publicclass类名implement

温馨提示

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

评论

0/150

提交评论