Java程序设计课件第三章面向对象程序设计_第1页
Java程序设计课件第三章面向对象程序设计_第2页
Java程序设计课件第三章面向对象程序设计_第3页
Java程序设计课件第三章面向对象程序设计_第4页
Java程序设计课件第三章面向对象程序设计_第5页
已阅读5页,还剩61页未读 继续免费阅读

下载本文档

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

文档简介

Java语言程序设计

第三章Java面对对象编程基础讲授人:傅晓阳教授上章回顾JAVA的基本数据类型分为几种?分别是什么?基本数据转换的原则是什么?流程限制有几种形式,分别是什么?jluzhDavidFu本章课程纲要抽象与接口继承与多态类与对象√jluzhDavidFu本课程纲要变量与方法的运用范围变量与方法

类的定义与对象的创建

类与对象jluzhDavidFu类与对象类(class):定义了同类实体所共有的属性和行为,是属性与行为的集合。成员变量(field):在类中定义的属性变量,称为成员变量,某些书上也称为域变量。类中的成员变量描述了该类对象所共有的属性特点。成员方法(method):在类中定义的行为方法,称为成员方法。类中的成员方法描述了该类对象所共有的行为特点。对象(instance):定义了某类的独特个体,该对象中包含了该类共有的全部属性特点和行为方法。对象是类的实例。jluzhDavidFu面对对象编程的三个特点封装性将代码及其处理的数据绑定在一起的编程机制继承性依据现有的类创建新类的特性多态性父类中的方法在子类中具有不同的表现形式的特点称为多态性jluzhDavidFu类定义类定义时分为类声明与类主体,具体格式如下:[类访问修饰符列表]class类名extends父类implements接口列表{ 声明成员变量1; …声明成员变量n;声明成员方法1;…声明成员方法n;}jluzhDavidFu对象的创建与运用对象的创建对象声明与创建的具体格式如下:类名对象名;对象名=new构造方法(参数列表);也可以如下定义:类名对象名=new构造方法(参数列表);jluzhDavidFu构造方法构造方法的定义:构造方法必需与所在的类同名;构造方法没有任何返回类型(其中包括关键字void的空返回类型)任何类都具有构造方法,假如在编程过程中没有显式的定义类的构造方法,系统将自动为该类供应一个默认的不带参数的构造方法假如在类中已经显式定义了构造方法,系统将不再供应任何默认的构造方法。jluzhDavidFu构造方法构造方法的定义格式如下:[构造方法访问修饰符]类名(方法参数列表){ 方法体}publicclassRect//类声明部分;{ privatefloatrectLong,rectWide;publicRect()//类的构造方法{ rectLong=2.5;

rectWide=1.2;}……}jluzhDavidFu重载方法重载方法:一个类可以具有多个方法名相同,不同参数列表的成员方法。这些成员方法称为互为重载。其中重载构造方法是一个重要的重载方式。方法重载具有以下特点:互为重载方法的方法名称必需相同,与方法的返回类型无关。重载方法的参数列表确定不同,至少参数个数与参数的类型有一个是不相同的。重载方法在编译时就确定了方法的调用地址,因此该重载过程称为静态多态性。jluzhDavidFu主方法与对象的运用主方法:publicstaticvoidmain(Stringargs[]){主方法体}对象的运用:引用对象的成员变量对象.成员变量引用对象的成员方法对象.成员方法(参数列表)jluzhDavidFu本课程纲要变量与方法的运用范围变量与方法√

类的定义与对象的创建类与对象jluzhDavidFu常量与变量static静态关键字:static修饰符可以与变量、方法和代码块一起运用。除了内部类以外,一般类不运用static进行修饰,而类的成员变量和成员方法可以运用static进行修饰静态变量与静态方法无需创建对象就可以访问。jluzhDavidFu常量与变量实例变量(instancevariable):指类中的属性成员变量,类的每个实例对象都有该成员变量的的一个副本,并且通过构造方法,可以对这些成员变量进行赋值。StringstuName;

int

stuAge;StringstuClassNo;静态变量(staticvariable):指另外一些成员变量不是与类的实例一一关联,而是与类相关联,因此也称为类变量。

staticdoublePI;jluzhDavidFu实例变量与静态变量的区分静态变量定义时必需在类型名称前运用static关键字实例变量在每个对象中都有一个独立的副本。而静态变量对于全部对象都只有一个副本。一个对象中的实例变量发生了变更,不会影响到另外一个对象中对应的这个实例变量的值。在运用实例变量时,必需通过对象调用该实例变量。jluzhDavidFu方法的声明与调用方法的声明格式:[访问修饰符列表]类型名称方法名称(参数列表){ 局部变量声明部分; 语句声明部分;}jluzhDavidFu方法的声明与调用方法一般有以下两种调用方法:对于非静态成员方法,在同一个类中的其他非静态成员方法中可以干脆调用。当非静态成员方法在静态成员方法中调用时,必需运用该类的对象实例变量进行调用。对于静态成员方法,可以在同一个类的非静态成员方法以及主方法中干脆调用。但在其他类中的非静态方法中,应当运用静态方法所属类名调用该方法。jluzhDavidFu方法的参数传递在java中,方法的参数传递方式是接受值传递方式,即传递的是某变量值的拷贝。基本数据类型的参数传递将参数的基本数据变量的副本传递到方法中,因此方法中修改的变量并不是类中的变量。参见实例3-7parambasic.java引用数据类型的参数传递引用数据类型的参数为对象的引用地址,由于方法参数的传递是值传递,将该对象地址的副本传递到方法中,因此在方法中所修改的对象与类中传递的对象是同一个对象。参见实例3-8ParamRef.javajluzhDavidFu本课程纲要变量与方法的运用范围√变量与方法类的定义与对象的创建类与对象jluzhDavidFu变量与方法的运用范围全局作用范围变量:运用public、static修饰符修饰的公有静态变量属于全局变量。publicstaticdoublePI=3.14;;类作用范围变量:运用访问修饰符public,protected,缺省,以及private修饰的非静态成员变量,称为类作用变量,该变量在其他类中可依据其封装性通过对象调用运用。Circle类中的属性变量 privatefloatradius;jluzhDavidFu变量与方法的运用范围块作用范围变量:成员方法中参数变量以及方法体中定义的变量以及语句块中定义的变量,称为块作用变量,也称为局部变量。。(1)成员方法的变量参数例如:public

static

void

testParam(intx)方法中的x变量(2)成员方法体中定义的变量public

double

getTriangleArea(double

high,doublebaseline) { doublearea; area=1/2*high*baseline;

returnarea; }中的area变量。jluzhDavidFu变量与方法的运用范围(3)静态语句块中的变量 //静态块statict; static{t=30; System.out.println(“静态变量t=”+t); }(4)限制、循环语句所组成的语句块中定义的变量 for(inti=0;i<10;i++) { System.out.println("i="+i);}jluzhDavidFu在作用域范围中同名变量的解决方案程序设计中,一般不允许在重叠的作用域范围中定义相同名称的变量。但在java程序设计中,常常为了避开定义多个相近变量名称,类的属性变量与成员方法中的参数变量常常接受相同名称。当成员变量名称与成员方法中的名称相同时,对于非静态属性的成员域,可以通过this.成员变量=参数变量;来对当前成员变量进行赋值。也可以通过super.成员变量=参数变量;来对父类成员变量进行赋值。参见例题3-9TestSameName.javajluzhDavidFu本章课程纲要抽象与接口继承与多态√类与对象jluzhDavidFu本课程纲要多态继承

包与封装

继承与多态jluzhDavidFu包(package)包的概念与定义包有两个作用,一个是将相像功能的类和接口封装到一个书目中;其次个作用是保证包是一个唯一命名的集合,使得一个包中运用类名不会影响到其他包中类的命名。包声明的格式为:package包名称.jluzh.javabasic.ch3;jluzhDavidFu包的导入与用法通过叮嘱行编译带有包的java源程序的格式如下:javac–d路径名java源程序例如:javac–d.Animal.java导入包语句定义如下:import包名.*;import包名.类型名称;importstatic包名.类型名称.静态成员方法名称;jluzhDavidFu包的导入与用法包与书目有本质区分:(1)包与包之间没有嵌套关系,即任何包不会包含其他包。而书目具有包含关系。(2)包反映了存储类的书目结构,理论上讲,可以有随意多的圆点分隔形成包名。但包名不宜过于困难,这样会导致存储类的书目结构较深。jluzhDavidFu包的导入与用法一般定义java源程序接受如下结构:package包名;import包名.*或包名.类名或包名.接口名称;[访问修饰符列表]class类名[extends父类implements接口列表]{ 类主体}class类名{ 类主体}jluzhDavidFu包的导入与用法标准包:在java语言程序设计中,除了可以依据实际问题的须要编写自己的类以外,事实上,大部分的基础类和方法是不须要用户自行编写的,而是可以干脆运用Sun公司供应的标准类包中的标准类。java.util……jluzhDavidFu封装-四种访问限制模式公有模式public:接受公有模式访问修饰符所修饰的类、类成员变量以及方法不仅在本类中可以访问,而且可以公开给其他类运用。受疼惜模式protected:接受受疼惜模式访问修饰符修饰的类、类成员变量以及方法,可以在本类中、同一个包中的其他类以及不同包中的子类中被访问到。默认模式:默认模式就是在类、类的成员变量以及成员方法前不加任何修饰符的修饰方式。接受这种默认模式,该类可以被同一个包中的任何类进行访问。私有模式private:接受私有模式修饰的类、成员变量以及成员方法只能在声明它的类中被访问,在其他类中无法访问。jluzhDavidFu封装类的访问限制修饰符对类成员的限制由小到大的依次为:public<protected<默认模式<private参见例题3-11Shape.java和Rect.java修饰词

同一个类

同一个包

子类

所有类

public 允许访问 允许访问 允许访问允许访问

protected 允许访问 允许访问 允许访问

default 允许访问 允许访问

private 允许访问jluzhDavidFu封装类1inta;publicintb;protectedintc;privateintd;类1的子类类2同一个包jluzhDavidFu封装包2包1类1inta;publicintb;protectedc;privated;类2包1子类包3jluzhDavidFu本课程纲要多态继承√

包与封装继承与多态jluzhDavidFu继承类的继承性是依据当前类创建新类的特性extends关键字定义子类的声明格式如下:[访问修饰符列表]class类名extends父类名{ 成员变量声明部分 成员方法声明部分}jluzhDavidFu继承关于实现继承,创建新类的具体特点如下:1)必需先定义父类,再继承父类,否则出现无法找到父类的编译错误。2)在java语言中,一个类只能继承一个父类,称为单继承。3)子类可以继承父类的实例成员变量和静态成员变量。换句话说,在子类中,不必定义这些变量,就可以干脆运用它们。4)子类可以继承除了构造方法以外的全部成员方法。因为父类的构造方法用来创建父类的对象,子类所创建的对象应当与父类有所区分。jluzhDavidFu继承5)父类不能运用子类中定义的新成员变量和成员方法。这反映了继承的不行逆性。6)子类可以依据实际状况,重新定义父类的成员方法,从而实现与父类不同的行为特点。这是实现多态性的重要手段。7)全部的类都默认继承了一个共同父类java.lang.Object。除了java.lang.Object类没有父类,全部的类都有父类,即使没有显式定义继承一个父类。也就是说,java.lang.Object是全部类的父类。参见实例3-12Person.java和Student.java类的继承性jluzhDavidFuthis和super在程序中也可以显式运用this变量来调用当前类的成员变量,成员方法以及构造方法。this的用法如下:访问成员变量this引用成员变量的格式:this.实例成员变量;访问成员方法this引用成员方法的格式:this.实例成员方法(参数列表);jluzhDavidFuthis和super与this关键字相对应,假如要在子类中引用父类的成员变量、方法、或构造方法,就可以运用super。访问父类的成员变量 super引用成员变量的格式: super.实例成员变量;引用父类的成员方法super引用父类的成员方法的格式:super.实例成员方法(参数列表);引用父类的构造方法super引用父类构造方法的格式为:super(参数列表);jluzhDavidFu类型转换intanceof运算符子类和父类之间可以进行类型转换,其中,转换的方式为三种:隐式类型转换:将类型为子类型的数据干脆转换为类型为父类型的数据。 TeacherteacherLi=newTeacher();PersonLisi=teacherLi;显式类型转换:将类型为父类型的数据转换为类型为子类型的数据。这时必需运用强制类型转换运算符“()”jluzhDavidFuinstanceof运算符的用法instanceof的作用:假如两个类型之间没有父子关系,则一般不能进行类型转换。TeacherteacherLi=newTeacher();System.out.println((Student)teacherLi);运用intanceof运算符可以推断一个引用表达式所指向的实例对象是否是某种引用类型的实例对象。instanceof运算符的表达式格式为:引用对象instanceof引用类型参见实例3-14TransType.javajluzhDavidFu本课程纲要多态√

继承包与封装继承与多态jluzhDavidFu静态多态性(overload)静态多态性是指在具有方法名称相同但参数列表不同的特性,也称为重载(overload)。重载方法可以是成员方法也可以是构造方法不同参数列表是指方法的参数个数不同或参数的类型不同或参数个数与类型都相同,但参数的排列依次不同。重载方法具有相同的方法名称,相近的功能,有利于程序的维护。jluzhDavidFu静态多态性(overload)重载方法的留意事项:重载方法的方法名称必需相同重载方法与返回值类型没有关系重载方法的参数列表必需不同。重载方法的地址在程序编译时确定,因此称为静态多态性。jluzhDavidFu动态多态性(override)动态多态性是指在父类与子类中具有基本相同的方法声明首部,但功能不同的非静态成员方法。这时,子类的成员方法称为父类的成员方法的覆盖方法,有时也称为重写方法(override)。方法声明首部包括如下:[访问修饰符列表]方法名(参数列表)方法声明首部相同也就是说访问修饰符列表中的内容、方法名称以及参数列表都必需相同。对于覆盖方法,不包括final和static修饰符。参见实例3-15DynamicPoly.javajluzhDavidFu本章课程纲要抽象与接口√继承与多态类与对象jluzhDavidFu本课程纲要内部类接口

抽象类

抽象与接口jluzhDavidFu抽象类抽象类:当一个类中至少有一个方法是抽象方法或者定义该类时运用abstract关键字,这个类就称为抽象类。抽象类不能创建实例对象,但可以派生其他子类。子类必需具体实现全部继承的抽象方法,这个子类才不是抽象类。抽象类必需运用抽象关键字abstract来修饰。具体定义格式为:[访问修饰符]abstract类名{ 定义成员变量; 定义抽象成员方法; 定义成员方法;}jluzhDavidFu抽象类抽象类与一般类的区分如下:(1)抽象类声明时必需运用abstract抽象关键字,抽象类可以没有抽象方法,但假如一个类有一个或一个以上的抽象方法,这个类必需声明为abstract抽象类。(2)抽象类不能通过构造方法创建自身的实例,但抽象类可以通过其非抽象的子类创建实例,并通过动态多态性调用子类的覆盖成员方法。(3)抽象类的子类也可以是抽象类,但抽象类必需有自己非抽象的子类,否则无法实现多态性。参见例题3-16TestAnimalAbs.javajluzhDavidFu抽象类抽象方法:是指只具有方法声明部分而没有定义方法主体的方法。该方法须要在方法前加上abstract抽象关键字。抽象类供应了方法声明与方法主体实现分别机制,提前为全部子类定义好共同的行为模式名称。抽象方法的具体定义格式如下:[访问修饰符]abstract返回值类型方法名(参数列表);抽象方法与一般成员方法的区分:(1)抽象方法没有方法主体;在方法声明部分后加上分号;在返回值类型前加上abstract关键字。(2)抽象方法不能运用private私有修饰符进行修饰,因为私有方法不能被继承,因此也就不能在子类中重新定义。jluzhDavidFu本课程纲要内部类接口√

抽象类抽象与接口jluzhDavidFu接口接口:接口是一种特殊的抽象类,是相关常量和抽象方法的集合。接口中全部的方法都必需是抽象方法。接口实现了方法声明与实现的分别机制,使实现接口的类具有相同的行为模式,但又通过多态性具有不同的实现方式。与声明类运用class关键字相像,声明接口必需运用interface关键字。接口的声明格式如下:(1)接口中只有常量[访问限制修饰符]interface接口名称extends父接口名称{ 常量成员变量}jluzhDavidFu接口接口中只有抽象方法[访问限制修饰符]interface接口名称extends父接口名称{ 抽象方法}接口中包含常量和成员方法[访问限制修饰符]interface接口名称extends父接口名称{ 常量成员变量 抽象方法}jluzhDavidFu接口implements关键字用来实现接口当类实现接口时,须要运用关键字implements。具体声明格式如下:[访问修饰符列表]class类名extends父类implements[接口列表]{ 类主体部分}访问修饰符列表一般运用public或默认访问限制权限。在java语言中,接受单继承的继承方式,假如须要多重继承,则接受实现多个接口的方式来实现。jluzhDavidFu接口与抽象类的区分序号接口抽象类1接口中可以只定义常量或抽象方法,也可以二者都定义。抽象类中一般不能只定义成员属性,而不定义成员方法。2接口中不能有构造方法以及普通成员方法,只能有抽象方法。抽象类中可以有构造方法以及普通成员方法,但一般至少应该有一个抽象方法。3接口中的成员变量必须是public,static和final修饰的常量,不能有其他普通成员变量。可以是任何成员变量,也可以是常量。jluzhDavidFu接口与抽象类的区分4一个类可以实现多个接口,并且接口可以使用extends进行多重继承其他的接口来扩展当前的接口。单继承,一个类只能继承一个抽象类。5接口中抽象方法在子类中必须完全实现,否则接口无法实例化。抽象类的子类还可以是抽象类,但最终必须有一个非抽象的子类,否则抽象类无法实例化。参见例题3-18ShapeImpl.java3-19TestAnimalImpl.javajluzhDavidFufinal关键字的用法final关键字可以修饰不具有抽象属性的类、成员变量以及成员方法。不行以修饰抽象类、接口、构造方法、抽象成员方法。abstract和final关键字不能同时运用。final关键字可以修饰类、成员变量和成员方法最终类:在定义类时,在访问修饰符列表中包含final关键字,该类称为最终类。最终类不能派生出子类,也就是说不能作为超类。jluzhDavidFufinal关键字的用法最终成员属性:在定义类的成员属性时,假如访问修饰符列表中包含final关键字,则该成员属性称为最终成员属性。一种不具有静态属性,该成员属性只能在定义时或在构造方法中赋值一次。另一种是与静态属性共同修饰变量,这种变量在此之后就不能进行修改了,一般称为常量。最终成员方法:在定义类

温馨提示

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

评论

0/150

提交评论