
Java程序设计-第4章课件.ppt
40页第四章第四章 面向对象(上)面向对象(上)l什么是抽象什么是抽象l类与对象及其关系类与对象及其关系l类中定义的属性(域)与方法(操作)类中定义的属性(域)与方法(操作)l对象对象l构造方法构造方法l类成员属性和方法的其它修饰符类成员属性和方法的其它修饰符l包(包(Package) 主要内容主要内容什么是抽象抽象的定义抽象的定义l抽象(abstraction)是从被研究对象中舍弃个别的、)是从被研究对象中舍弃个别的、非本质的、或与研究主旨无关的次要特征,而抽取与研非本质的、或与研究主旨无关的次要特征,而抽取与研究有关的共性内容加以考察,形成对研究问题正确的简究有关的共性内容加以考察,形成对研究问题正确的简明扼要的认识明扼要的认识动物动物经过人类抽象用一个叫”动物”的类来概括类与对象及其关系 类与对象及其关系类与对象及其关系 l对象是对客观事物的抽象对象是对客观事物的抽象l类是对对象的抽象,在语言中是一种抽象的数据类是对对象的抽象,在语言中是一种抽象的数据类型l类的定义在类的定义在Java中可简述为中可简述为lclass类名类名l它们的关系是,对象是类的实例,类是对象的模它们的关系是,对象是类的实例,类是对象的模板。
板 类中定义的属性与方法 类中定义的属性(域)与方法(操作)类中定义的属性(域)与方法(操作) 类和对象都有属性和操作,属性是事物静态特征的抽象,操作是事物动态特征的抽象如【例4.1】class FighterPlane String name; int missileNum; void fire() if (missileNum0) missileNum -= 1 ; System.out.println(“now fire a missile !”); else System.out.println(“No missile left !”); 类的属性或称为“域”类的方法类中的域变量和方法存在以下关系类中的域变量和方法存在以下关系1.类中定义的域变量可以被类中所有的方法所访问2.方法中的形式参数和定义的局部变量的作用域仅限 于方法,局部变量在使用前必须进行赋值初始化 如果局部变量和类中的属性变量重名,则在方法中 对同名变量改变的是局部变量 3.类中定义的方法可以进行递归调用 【例4.2】Java的类的类一个一个Java类形式上包含两个部分:类形式上包含两个部分:类首说明 类体类首说明类首说明的形式如下:类首说明的形式如下:修饰符 class 类名 extends超类名 implements接口名列表 类的修饰符有类的修饰符有private、public、abstract、final。
一个类可以同时有多个修一个类可以同时有多个修饰符,但是不能有相同的修饰符当一个类有多个修饰符时,这些修饰符无饰符,但是不能有相同的修饰符当一个类有多个修饰符时,这些修饰符无先后顺序之分,可以任意的顺序排列它们先后顺序之分,可以任意的顺序排列它们注意:abstract和和final不能同时作为一个类的修饰符不能同时作为一个类的修饰符private(私有私有):修饰的类只能被同一包名中的类访问,这是修饰的类只能被同一包名中的类访问,这是Java默认方式;默认方式;public(公共公共):修饰的类能被所有的类访问;修饰的类能被所有的类访问;abstract(抽象抽象):修饰的类修饰的类不能被实例化,它包含有未实现的方法它包含有未实现的方法final(最终最终):修饰的类不能被继承,即修饰的类不能被继承,即不能有子类类名是所创建的类的名字,类名可以是任意的类名是所创建的类的名字,类名可以是任意的Java标识符,根据标识符,根据Java命名命名的约定,类名的每个有意义的单词的首字母要大写,其余字母小写的约定,类名的每个有意义的单词的首字母要大写,其余字母小写extends(继承继承):保留字用来表明新创建的类继承哪个类,被继承的类称为保留字用来表明新创建的类继承哪个类,被继承的类称为此类的超类。
此类的超类extends后面只能跟一个超类名称后面只能跟一个超类名称implements(实现实现):用来表明这个类实现了哪些接口,接口名可以有多个用来表明这个类实现了哪些接口,接口名可以有多个类体类体中定义了该类所有的成员变量和该类所支持的方法,其形式说明类体中定义了该类所有的成员变量和该类所支持的方法,其形式说明如下:如下:类体 成员变量说明 构造方法说明 静态初始化说明 方法说明 类体由成员变量说明、构造方法说明、静态初始化说明和方法说明构类体由成员变量说明、构造方法说明、静态初始化说明和方法说明构成,它们都是可选的类体中的这四种说明没有先后顺序之分,但是成,它们都是可选的类体中的这四种说明没有先后顺序之分,但是为了类的可读性,建议按照上面出现的顺序说明为了类的可读性,建议按照上面出现的顺序说明成员变量说明及其使用成员变量说明及其使用1成员变量说明 成员变量的说明类似于方法的局部变量说明,所不同成员变量的说明类似于方法的局部变量说明,所不同的是,成员变量定义在类中,是类成员的一部分,整的是,成员变量定义在类中,是类成员的一部分,整个类都可以访问它个类都可以访问它Java中成员变量说明形式如下:中成员变量说明形式如下:修饰符修饰符成员变量类型成员变量类型成员变量名列表成员变量名列表; 成员变量的修饰符有以下几种:缺省访问修饰符、成员变量的修饰符有以下几种:缺省访问修饰符、public、protected、private、final、static、transient和和volatile。
1)缺省访问修饰符缺省访问修饰符的成员变量可以被同一包(缺省访问修饰符的成员变量可以被同一包(package)中的任何类访问中的任何类访问2)public(公共)public修饰的成员变量可以被项目文件中的任何方法所访问由于修饰的成员变量可以被项目文件中的任何方法所访问由于public成员变量不受成员变量不受限制限制,这易使类的对象引起不希望的修改,建议成员变量尽量不要使用这易使类的对象引起不希望的修改,建议成员变量尽量不要使用public修饰符3)protected (受保护)protected修饰的成员变量可以被有继承关系的类自由访问,即子类可以访问它修饰的成员变量可以被有继承关系的类自由访问,即子类可以访问它4) private (私有)private修饰的成员变量只能在同一个类中使用这种方式通常是最为安全的修饰的成员变量只能在同一个类中使用这种方式通常是最为安全的5) static(静态):(类变量)(类变量) static修饰的成员变量又称为类变量不加修饰的成员变量又称为类变量不加static修饰的成员变量又叫对象变量修饰的成员变量又叫对象变量对象对象变量依附于具体的对象实例,它的值因具体对象实例的不同而不同,而类变量为该类变量依附于具体的对象实例,它的值因具体对象实例的不同而不同,而类变量为该类的所有对象共享,它的值不因类的对象不同而不同。
的所有对象共享,它的值不因类的对象不同而不同6) final(最终):(常量)(常量)final修饰的成员变量叫最终成员变量一开始创建该变量时将其设定了一个值,在以修饰的成员变量叫最终成员变量一开始创建该变量时将其设定了一个值,在以后程序的运行过程当中,变量的值将一直保持这个值不变最终变量又称为常量后程序的运行过程当中,变量的值将一直保持这个值不变最终变量又称为常量Java中的常量必须是类的成员对于最终成员变量,任何赋值都将导致编译错误因中的常量必须是类的成员对于最终成员变量,任何赋值都将导致编译错误因为常量在说明以后就不能改变其值,所以常量必须要使用变量初始化来赋初值无论为常量在说明以后就不能改变其值,所以常量必须要使用变量初始化来赋初值无论是实例变量,还是类变量,都可以被说明成常量是实例变量,还是类变量,都可以被说明成常量final修饰符和修饰符和static修饰符并不冲突修饰符并不冲突成员变量类型可以是基本类型或类成员变量名使用符合成员变量类型可以是基本类型或类成员变量名使用符合Java规定的标识符来表示规定的标识符来表示成员变量使用类的成员变量在定义它的类内部,直接通过类的成员变量在定义它的类内部,直接通过成员变量名来访问。
如从类的外部访问,类变量和类来访问如从类的外部访问,类变量和类对象变量的使用方法是不同使用类变量的格式对象变量的使用方法是不同使用类变量的格式如下:如下: 类名 . 类变量名 由此可见,访问类变量与类的对象构造和对象都无关由此可见,访问类变量与类的对象构造和对象都无关访问类对象变量的格式如下:访问类对象变量的格式如下:类对象名 . 类对象变量名 由此可见,要使用对象变量首先要构造对象,获得类由此可见,要使用对象变量首先要构造对象,获得类对象名类对象名即对应的类变量名类对象名即对应的类变量名例例4-1成员变量的访问成员变量的访问classPointfinalstaticPointorigin=newPoint(0,0);/定义一个类变量,常量,定义一个类变量,常量,origin为坐标原点为坐标原点intx;inty;Point(intx,inty)thisx=x;this.y=y;publicclassUsingStaticpublicstaticvoidmain(Stringargs)Pointp1=Point(10,20);/构造类构造类Point的对象的对象p1Pointp2=Point(310,120);System.out.println(类类Point中的类变量:中的类变量:);System.out.println(+Point.origin.x+,+Point.origin.y+);/访问类变量访问类变量(类名 . 类变量名) System.out.println(类类Point中的类实例变量:中的类实例变量:);System.out.println(+p1.x+,+p1.y+);/访问类对象变量访问类对象变量x、y,p是类对象名是类对象名(类对象名 . 类对象变量名) 迪米特法则迪米特法则LawofDemeter1987,NortheasternUniversity火星登陆软件,木星欧罗巴卫星轨道飞船软件系统火星登陆软件,木星欧罗巴卫星轨道飞船软件系统Donttalktostrangers对 象对象的产生对象的产生NEWNEW类对象对象的产生使用的代码:对象的产生使用的代码:newFighterPlane();对象的声明使用的代码:对象的声明使用的代码:FighterPlanefp;NEW类对象可以声明后立即赋予对象:可以声明后立即赋予对象:FighterPlanefp=newFighterPlane()对象内存空间分布对象内存空间分布当“FighterPlane fp = new FighterPlane() ”处于某个方法中时:对象作为参数的特点对象作为参数的特点 普通数据类型作为参数传递是值传递,普通数据类型作为参数传递是值传递,【例例4.3】。
对象是引用传递对象是引用传递a对象s对象as【例例4.4】【例例4.5】对象数组对象数组MyClass mc = new MyClass10; 数组对象特点及常用方法数组对象特点及常用方法l具有对象引用的特点,例具有对象引用的特点,例【4.64.6】l属性属性lengthlength的用法,例的用法,例【4.74.7】构造方法构造方法的含义,构造方法的含义,【例例4.84.8】 构造方法的特征,构造方法的特征,【例例4.94.9】、【4.104.10】 构造方法的注意事项构造方法的注意事项 finalizefinalize方法与垃圾回收方法与垃圾回收什么是垃圾对象?垃圾对象何时回收?垃圾对象回收时调用finalize方法。
