资源描述
第第5章章类和对象类和对象本章学习目标:本章学习目标:理解面向对象程序设计的基本思想,特别是类的概念理解面向对象程序设计的基本思想,特别是类的概念掌握类的设计方法,对象的创建、使用和删除掌握类的设计方法,对象的创建、使用和删除掌握访问控制符及包的使用方法掌握访问控制符及包的使用方法5.1引言引言lJava语言作为一种面向对象的程序设计语言,语言作为一种面向对象的程序设计语言,具备面向对象技术的基本属性。具备面向对象技术的基本属性。l定义类和建立对象是定义类和建立对象是Java编程的主要任务。本编程的主要任务。本章将介绍章将介绍Java面向对象程序设计的基础,即类、面向对象程序设计的基础,即类、对象、包、接口等内容。对象、包、接口等内容。5.2类类l抽象和封装是面向对象程序设计的重要特点,主抽象和封装是面向对象程序设计的重要特点,主要体现在类的定义及使用上要体现在类的定义及使用上:类是类是Java中的一种重要的构造类型;中的一种重要的构造类型;封装了一类对象的属性和方法,是对这一类对象的抽象。封装了一类对象的属性和方法,是对这一类对象的抽象。lJava的类分为两大部分的类分为两大部分:系统定义的类系统定义的类用户自定义的类用户自定义的类 public class Teacherprivate String name;protected int hours;protected long payment;public Teacher(String name,int hours)this.name=name;this.hours=hours;this.payment=0;public void show()System.out.println(name+工作了+hours+小时,应付+payment);public void countPayment()payment=counting(1000,hours,50,0);public void resetHour()hours=0;public void addHour(int h)hours+=h;protected long counting(int base,int h,int perHour,long other)return(long)base+h*perHour+other;类声明类声明类体类体成员变量成员变量构造方法构造方法成员方法成员方法5.2.1类声明类声明类声明格式如下:类声明格式如下:类类的的修修饰饰符符class 类类名名extends 父父类类名名implements 接口列表接口列表class是是声声明明一一个个类类的的关关键键字字,是是必必须须的的,类类名名是是要要声声明明的的类类的的名名字字,它必须是一个合法的它必须是一个合法的Java标识符。标识符。根据声明类的需要,类声明还可以包含三个选项:根据声明类的需要,类声明还可以包含三个选项:l声明类的修饰符;l说明该类的父类;l说明该类所实现的接口。类修饰符类修饰符lpublic:该关键字将一个类声明为公共类,公共类在所有类中可该关键字将一个类声明为公共类,公共类在所有类中可见,即它可以在其他任何类中访问,但在其他包中须用见,即它可以在其他任何类中访问,但在其他包中须用import导导入。一个程序的主类必是公共类,主类的入。一个程序的主类必是公共类,主类的public关键字可以缺省,关键字可以缺省,即默认为即默认为public。在一个。在一个Java 源文件中只能有一个类被声明为源文件中只能有一个类被声明为public,而且一旦有一个类为,而且一旦有一个类为 public,那这个,那这个Java 源文件的文件源文件的文件名就必须要和这个被名就必须要和这个被 public 所修饰的类的类名相同,否则编译不所修饰的类的类名相同,否则编译不能通过。能通过。labstract:声明该类为抽象类,它没有实现的方法,需要子类提声明该类为抽象类,它没有实现的方法,需要子类提供方法实现,因此,它不能被实例化,即抽象类不能新建对象。供方法实现,因此,它不能被实例化,即抽象类不能新建对象。lfinal:声明该类为终态类,它不能被其他类继承,即没有子类。声明该类为终态类,它不能被其他类继承,即没有子类。类修饰符类修饰符l没有类修饰符没有类修饰符:即直接声明:即直接声明class A,称为,称为“默认访问模式默认访问模式”,在该模式下,这个类只能被同一个包中的类访问,这一访问特性在该模式下,这个类只能被同一个包中的类访问,这一访问特性又称包访问性。又称包访问性。l注意注意:修饰符:修饰符abstract和修饰符和修饰符final不能同时修饰同一个类,因不能同时修饰同一个类,因为为abstract类是没有具体对象的类,它必须有子类,即就是用来类是没有具体对象的类,它必须有子类,即就是用来被继承的;而被继承的;而 final类是不可能有子类的类,所以用类是不可能有子类的类,所以用abstract和和final修饰同一个类是无意义的。修饰同一个类是无意义的。说明类的父类说明类的父类l 类的修饰符类的修饰符class 类名类名extends 父类名父类名implements 接口接口列表列表l在在Java语言中,除了语言中,除了Object类之外,每个类都有一个父类。类之外,每个类都有一个父类。Object类是类是Java语言中唯一没有父类的类。如果某个类没语言中唯一没有父类的类。如果某个类没有指明父类,有指明父类,Java语言就默认它是语言就默认它是Object类的子类。因此,类的子类。因此,所有其他类都是所有其他类都是Object类的直接子类或间接子类。需要注类的直接子类或间接子类。需要注意的是:在意的是:在extends之后只能跟唯一的父类名,即使用之后只能跟唯一的父类名,即使用extends只能实现单继承只能实现单继承。l 类的修饰符类的修饰符class 类名类名extends 父类名父类名implements 接口接口列表列表l一个类若要实现一个或多个接口,可以使用关键字一个类若要实现一个或多个接口,可以使用关键字implements进行声明,并在其后给出该类要实现的接口的进行声明,并在其后给出该类要实现的接口的名称列表,多个接口名之间以逗号分隔。接口名称列表,多个接口名之间以逗号分隔。接口可以看作是可以看作是100%的抽象类的抽象类。l接口的定义和实现会在后面介绍。接口的定义和实现会在后面介绍。说明一个类所实现的接口说明一个类所实现的接口5.2.2类体类体l类体用一对大括号括起。类体用一对大括号括起。l类体中定义了该类中所有的变量和该类所支持的方法:类体中定义了该类中所有的变量和该类所支持的方法:成员变量对应类的静态属性成员变量对应类的静态属性方法对应类的行为和操作方法对应类的行为和操作l类中所定义的变量和方法都是类的成员。对类的成员可以类中所定义的变量和方法都是类的成员。对类的成员可以设定访问权限来限定其他类对它的访问。访问权限有这么设定访问权限来限定其他类对它的访问。访问权限有这么几种:几种:public、protected、private、default。类体类体l成员变量成员变量成员变量是类和对象的静态属性,它可以是基本数据类型的成员变量是类和对象的静态属性,它可以是基本数据类型的变量,也可以是其它类(系统类或用户自定义类)的对象。变量,也可以是其它类(系统类或用户自定义类)的对象。因此,定义成员变量的操作就是说明变量或创建对象的操作。因此,定义成员变量的操作就是说明变量或创建对象的操作。l方法方法方法是类的动态属性,标志了类所具有的功能和操作,用来方法是类的动态属性,标志了类所具有的功能和操作,用来把类和对象的数据封装在一起。把类和对象的数据封装在一起。Java的方法与其它语言中的函数或过程类似,是一段完成某的方法与其它语言中的函数或过程类似,是一段完成某种功能的程序段。种功能的程序段。5.2.3成员变量成员变量最简单的成员变量的声明方式如下:最简单的成员变量的声明方式如下:type 成员变量名成员变量名;这里的这里的type可以是可以是Java中任意的数据结构,包括简中任意的数据结构,包括简单类型、类、接口、数组。单类型、类、接口、数组。在一个类中的成员变量名应该是唯一的。在一个类中的成员变量名应该是唯一的。l成员成员变量的作用域是整个类。变量的作用域是整个类。成员变量成员变量1static用用static修饰的成员变量就是静态成员变量(类变量)。修饰的成员变量就是静态成员变量(类变量)。静态成员变量最本质的特点是:它们是类的成员变量,不属静态成员变量最本质的特点是:它们是类的成员变量,不属于任何一个类的具体对象,它不保存在某个对象的内存区成于任何一个类的具体对象,它不保存在某个对象的内存区成员变量中,而是保存在类的内存区成员变量的公共存储单元。员变量中,而是保存在类的内存区成员变量的公共存储单元。换句话说,对该类的具体对象而言,静态成员变量是一个公换句话说,对该类的具体对象而言,静态成员变量是一个公共的存储单元。任何一个类的对象访问它,得到的都是相同共的存储单元。任何一个类的对象访问它,得到的都是相同的值;任何一个类的对象修改它,都是对同一内存单元进行的值;任何一个类的对象修改它,都是对同一内存单元进行操作。操作。没有用没有用static修饰的变量是实例变量,必须实例化该类才可以修饰的变量是实例变量,必须实例化该类才可以使用实例变量。该类的不同对象都各自拥有自身的实例变量使用实例变量。该类的不同对象都各自拥有自身的实例变量的版本。的版本。成员变量成员变量 定义一个静态成员变量定义一个静态成员变量a和成员变量和成员变量b静态成员变量a对象1对象2成员变量b成员变量b公共存储单元成员变量成员变量2finallfinal:用来声明一个常量。:用来声明一个常量。如:如:classFinalVarfinal int CONSTANT=50;l此例中声明了常量此例中声明了常量CONSTANT,并赋值为,并赋值为50。对于。对于用用final限定的常量,在程序中不能改变它的值。通常限定的常量,在程序中不能改变它的值。通常常量名用大写字母表示。常量名用大写字母表示。成员变量成员变量3transientltransient告诉告诉Java虚拟机,在类对象序列化的时候,虚拟机,在类对象序列化的时候,此变量不需要持久保存。此变量不需要持久保存。l这些信息的生命周期仅存于调用者的内存中而不会被这些信息的生命周期仅存于调用者的内存中而不会被网络传输或写到磁盘里持久保存。网络传输或写到磁盘里持久保存。4.volatilel用来声明一个共享变量用来声明一个共享变量,使得各个线程对该变量的访使得各个线程对该变量的访问能够保持一致。问能够保持一致。5.2.4成员方法成员方法方法由方法声明和方法体组成,其一般格式如下:方法由方法声明和方法体组成,其一般格式如下:public|protected|privatestaticfinal|abstractnativesynchronized 返回值类型返回值类型 方法名(形式参数列表)方法名(形式参数列表)throws 异常列表异常列表 方法体各语句;方法体各语句;其中返回类型可以是任意的其中返回类型可以是任意的Java数据类型,当一个方法不需要数据类型,当一个方法不需要返回值时,则必须声明其返回类型为返回值时,则必须声明其返回类型为void。形式参数列表形式参数列表指明每个参数的名字和类型,各参数之间用逗号指明每个参数的名字和类型,各参数之间用逗号分隔,分隔,格式为:格式为:l形参类型1 形参名1,形参类型2 形参名2,classCircleintx,y,radius;/x,y,radius是成员变量是成员变量publicCircle(intx,inty,intradius)/x,y,radius是参数是参数Circle类有三个成员变量:类有三个成员变量:x、y和和radius。在在C
展开阅读全文
温馨提示:
金锄头文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
相关搜索