《面向对象复习》PPT课件.ppt
面向对象基础复习,主讲:钱 能,重庆科创职业学院计算机学院,一、面向对象的基本概念,类是对具有相同属性和方法的一组相似对象的抽象,或者说类是对象的模板。类是Java的核心,也是Java的基本单元。对象是某个类的实例,其变量表示属性,方法表示功能,Java正是通过类和对象的概念来组织和构建程序的。类与对象之间的关系:对象是类的实例(或者说变量),类是对象的集合(或者说类是一种抽象的数据类型)。,面向对象的三大特性:封装:将具有相同特征的对象的数据与行为捆绑在一起形成类的过程。继承:指在一个已有类的基础上,通过添加新的数据和方法,从而构成一个新类的过程。多态:一个类中名字相同但其参数数量与类型不同的方法之间构成多态。,二、面向对象程序设计的过程,1、分析问题,抽象概念,描述类。,2、编写程序,完成类的定义及变量、方法的定义。(类成员与实例成员,方法的重载,this关键字,类与成员的访问控制)3、保存:以源程序中类的名字命名。若有主类,则必须以主类名命名;否则选其中某类名命名。4、编译:源程序中有多少类,将会生成多少字节码文件。javac 源程序名.java(编译当前路径的源程序,并将生成的字节码文件放在当前路径)javac d 路径 源程序名.java(将编译生成的字节码文件存入指定路径;若声明了包,则在路径后生成相应包路径),5、解释执行 java 主字节码文件名加载相关字节码文件为类成员分配空间(由所有对象共享)执行主方法中的语句声明创建类的对象;为实例成员分配空间(实例变量由所有对象独占);执行构造方法中的语句;将对象的成员与对象关联起来;通过对象引用成员完成实际问题的解决。,主要内容,1.类声明和类体2.类体的构成3.构造方法与对象的创建4.对象的引用与实体,主要内容,5.成员变量6.方法7.方法重载8.this关键字9.包10.import 语句11.访问权限,类的声明与类体,在语法上,类由两部分构成:类声明和类体。基本格式为:Specifier class extends 父类名 implements 接口名 类主体其中,修饰符Specifier可以是关键字public,abstract和final中的一个或多个的组合。class是定义类的关键字,是所定义的类的名字,extends表示该类继承了它的父类,父类名指明父类的名称,implements表示类所实现的接口,若实现多个接口则用逗号隔开。,类体的构成,Specifier 其中,修饰符Specifier可以是关键字public,protected,private,final,static,transient和volatile的一个或多个的组合。(parameterList)throws/方法体其中,Specifier可以是public,protected,private,abstract和static中的一个或多个的组合。,构造方法,构造方法:与所在类名字完全一样的特殊方法,不能写返回值类型。创建对象时必须使用构造方法初始化对象,不能被其它方法调用。一个类可以有0个或多个构造方法,但必须保证方法的参数不同(个数或类型不同)。类中没有构造方法时,使用缺省构造方法创建对象;只自定义参数构造方法时,只能用所定义的方法创建对象;两者都有时,可以用任意构造方法创建对象。,对象的创建,=new 创建过程:为成员变量分配内存空间;然后执行构造方法中的语句;给出一个信息,已确保这些成员变量是属于对象。,对象的引用与实体,对象对成员变量和成员方法的引用。对象之间的引用。,成员变量与方法,首先掌握JAVA程序在计算机中执行的流程。类变量与实例变量的区别类变量在类加载入内存时分配存储单元,实例变量在创建对象时分配存储单元。类变量由所有对象共享,实例变量由对象各自占有。类变量可以通过类名或者对象引用,实例变量只能由对象引用。,成员变量与方法,类方法与实例方法的区别类方法在类加载入内存时分配入口地址,实例方法在创建对象时分配入口地址。注意:当创建第一个对象时,类中的实例方法就分配了入口地址,当再创建对象时,不再分配入口地址。即方法的入口地址被所有对象共享。实例方法可以调用该类中实例方法或类方法;类方法只能调用该类的类方法,不能调用实例方法。实例方法可以操作所有成员变量;而类方法只能操作类变量不能操作实例变量。类方法可以被类和对象引用,实例方法只能被对象引用,方法的重载,方法重载是指一个类中可以有多个方法具有相同的名字,但这些方法的参数必须不同,即或者是参数的个数不同,或者是参数的类型不同。,This关键字,理解JAVA变量的作用域This代表当前正在创建或者使用的对象,主要作用在于:当局部变量与成员变量发生冲突时,使成员变量的作用域扩展到局部区域。,包的创建,package 包的创建用javac 编译源文件后,将生成的class字节码文件拷贝到相应的包中。用javac d 编译源文件,直接将生成的class字节码文件生成在相应包中。,包的引用,import.引用先设置环境变量classpath,添加包的路径。使用import应用包中的类。注意:包中的类、成员变量与方法必须满足访问控制要求。,访问控制,public:类可以被其他所有类访问;成员变量和方法可以被任何程序直接访问和修改。protected:可以被成员变量与方法所在的类、同一个包中的其他类和其他包中该类的子类可以访问和应用。默认修饰符(友好的):可以被所在的类、同一包中的其他类访问和引用private:修饰成员变量和方法时,只能被定义它们的类访问和调用;其他类都不能获取,但可以借助该类的方法来操作。,练习讲解,使用for循环计算8+88+888+8888+的前10项之和。分析:sum=0,n=8;sum=sum+n;改变n的值。,public class Sum public static void main(String args)int i,sum=0,n=8;for(i=1;i10;i+)sum=sum+n;n=n*10+8;/end for System.out.println(“sum=”+sum);/end main/end class,如果要求用面向对象思想编写程序呢?,练习讲解,编写程序计算100-999之间的水仙花数(水仙花数是指一个三位数,其各个数之立方和等于该数,例如153,即为一水仙花数,因为153=13+53+33)。分析:1、用三重循环的嵌套。2、分别求出个、十、百位上的数字然后计算求解,public class Sxh public static void main(String args)int i,j,k;for(i=1;i=9;i+)for(j=0;j=9;j+)for(k=0;k=9;k+)if(i*i*i+j*j*j+k*k*k)=(i*100+j*10+k)(“水仙花数:”+i*100+j*10+k);/end main/end class,练习讲解,编写一个类,该类封装了一元二次方程共有的属性和功能,即该类有刻画方程系数的3个成员变量以及计算实根的方法。要求:该类的所有对象共享常数项。编写两个类:A和B,类A创建的对象可以计算两个正整数的最大公约数,类B创建的对象可以计算两个数的最小公倍数。要求类B的一个成员变量是类A的对象。,练习讲解,编写两个类放在同一程序中,分别完成求两个数的最大值,最小值;要求将它们放在同一个包中,然后再编写一个程序去引用它,完成求三个整数的最大值、最小值。将以上求最大值和最小值作为两个类(两个不同的程序)放在同一包中,然后用程序引用它。,课堂练习,1编译JavaApplet 源程序文件产生的字节码文件的扩展名为()A、java B、class C、html D、exe2main方法是JavaApplication程序执行的入口点,关于main方法的方法头以下哪项是合法的()?A、public static void main()B、public static void main(Stringargs)C、public static int main(String arg)D、public void main(Stringarg),B,B,4下列哪个是合法的Java标识符?()A、Tree&Glasses B、classC、_$theLastOne D、273.55Java的字符类型采用的是Unicode编码方案,每个Unicode码占用()个比特位A、8 B、16 C、32 D、646下面哪一种是基本类型标识符()A、byte B、String C、array D、interface,C,B,A,7在编写JavaApplication程序时,若需要使用到标准输入输出语句,必须在程序的开头写上()语句A、import java.awt.*;B、import;C、import java.io.*;D、import;8对于构造函数,下列叙述不正确的是()A、构造函数是类的一种特殊函数,它的方法名必须与类名相同。B、构造函数的返回类型只能是void型。C、构造函数的主要作用是完成对类的对象的初始化工作。D、一般在创建新对象时,系统会自动调用构造函数。,C,D,课堂练习,完成JAVA猜数游戏设计:给你一个1至100之间的整数,请猜测这个数。按模板要求,将【代码1】【代码6】替换为Java程序代码。分析随机产生一个整数。输入猜测的数字,然后判断是否相等,如果大于,则提示大了,并要求继续猜测;如果小于,则提示小了,并要求继续猜测;等于,则输入”猜对了“,程序结束。,