java03(第3章面向对象程序设计基础)副本.ppt

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

Java语言程序设计清华大学出版社第3章面向对象程序设计基础本章主要内容•3.1面向对象的基本概念•3.2类与对象•3.2.1定义类•3.2.2成员方法•3.3对象•3.4面向对象特性•3.4.1封装性•3.4.2继承性•3.4.3多态性•3.4.4其它修饰符的用法•3.5接口和包•3.5.1接口•3.5.2包•3.5.3压缩文件.jar3.1面向对象的基本概念•1、对象的基本概念•对象是系统中用来描述客观事物的一个实体,它是构成系统的一个基本单位。现实世界中的对象有两个共同特征:形态和行为。图3.2软件对象的变量和方法2、类的基本概念•类用class作为它的关键字,例如我们要创建一个汽车类,则可表示为:用类创建对象—实例化•当我们要通过汽车类来创建一个轿车对象,并使用它的刹车行为方法时,则要用下面的格式进行实例化:•//实例化汽车对象•汽车轿车=new汽车();•//引用汽车对象的刹车方法•轿车.刹车();3.2类与对象类和对象是Java的核心和本质。它们是Java语言的基础,编写一个Java程序,在某种程度上来说就是定义类和创建对象。定义类和建立对象是Java编程的主要任务。3.2.1定义类•1、类的一般形式类由类声明和类体组成,而类体又由成员变量和成员方法组成(如图3.3所示):一个具体的类2、类声明类声明由四部分组成:类修饰符、类关键字class、声明父类、实现接口,其一般形式如下:[public][abstract|final]class类名[extends父类名][implements接口列表]{……}各组成部分的具体说明•(1)类修饰符•public:这个public关键字声明了类可以在其他类中使用。缺省时,该类只能被同一个包中的其他类使用。•abstract:声明这个类为抽象类,即这个类不能被实例化。•final:声明该类不能被继承,即不能有子类。也就是说,不能用它通过扩展的办法来创建新类。•(2)类的关键字class•在类声明中,class是声明类的关键字,表示类声明的开始,类声明后面跟着类名,按习惯类名要用大写字母开头,并且类名不能用阿拉伯数字开头。给类名命名时,最好取一个容易识别且有意义的名字,避免A、B、C之类的类名。(3)声明父类extends为声明该类的父类,这表明该类是其父类的子类。一个子类可以从它的父类继承变量和方法。extends只能实现单继承。创建子类格式:classsubclassextends父类名{…}•(4)实现接口•在类声明中使用关键字implements实现接口,当要实现有多个接口时,各接口名以逗号分隔,其形式为:•implements接口1,接口2,···,···•接口是一种特殊的抽象类,这种抽象类中只包含常量和方法的定义,而没有变量和方法的实现。一个类可以实现多个接口,以某种程度实现“多继承”。3、成员变量和局部变量成员变量(在类体中定义,在整个类中都有效);局部变量(在方法中定义,只在本方法中有效)。变量(1)成员变量最简单的成员变量声明的形式为:类型成员变量名;[访问修饰符][static][final][transient][volatie]类型成员变量名;(2)局部变量在方法中声明的变量以及方法中的参数称为局部变量。(3)如果局部变量名与成员变量名相同,则成员变量被屏蔽。成员变量与局部变量classData{intx=12,y=5;publicvoidsum(){ints;s=x+y;}}x、y是成员变量,类中所有方法都可以使用它们s是局部变量。仅限于在sum()方法内部使用。如果局部变量名与成员变量名相同,则成员变量被屏蔽。classData{intx=12,y=5;publicvoidsum(){intx=3;//局部变量x屏蔽了成员变量ints;s=x+y;//s=this.x+y;}}3.2.2成员方法在Java中,必须通过方法才能完成对类和对象的属性操作。成员方法只能在类的内部声明并加以实现。一般在类体中声明成员变量之后再声明方法。1、方法声明返回类型方法名(形式参数){······//方法体内容}•(1)方法名方法声明包括方法名、返回类型和参数。•(2)方法体方法体是一对大括号“{}”之间的内容。【例3-1】教材P59图3.7方法声明与调用的运行结果方法重载•方法重载是指多个方法享有相同的名字,但是这些方法的参数必须不同,或者是参数的个数不同,或者是参数类型不同。返回类型不能用来区分重载的方法。【例3-2】教材P60图3.8重载与调用关系构造方法•与类名相同•无返回值类型说明•可以重载•New运算时调用,不能直接调用•例3-3,3-43.3对象•类是一个抽象的概念,而对象是类的具体化。类通过实例化生成对象。•一个对象的生命周期包括三个阶段:创建、使用和释放。1、对象的创建•创建对象的一般格式为:类名对象名=new类名([参数列表]);(1)对象声明:类名对象名;(2)实例化:对象名=new构造方法();2、对象的使用类是不能直接使用的,我们只能类实例化后的对象。而对象的使用是通过访问对象变量或调用对象方法。通过运算符“.”可以实现对对象的变量访问和方法的调用。(1)访问对象的变量访问格式:对象名.成员变量;例如,设有一个A类其结构如下:classA{intx;}对变量x赋值,先创建并实例化类A的对象a,然后再通过对象给变量x:Aa=newA();a.x=5;(2)调用对象的方法调用格式:对象名.方法名([参数列表]);【例3-5】用带参数的成员方法计算长方体的体积。【例3-6】用对象作为方法的参数计算圆柱体3、对象的释放•一般是JAVA的垃圾收集器自动回收•可以使用System.gc();要求回收,只提高回收线程的优先级•可以重载Object类的finalize()方法,将一些最后处理工作放在里面3.4面向对象特性•java语言中有三个典型的面向对象的特性:封装性、继承性和多态性。关于封装性封装的三大好处•专业分工•隐藏信息/实现细节•访问权限控制Package(包)•功能:–将一组java文件组织在一起–强内聚–弱耦合•创建独一无二的包名–Java包的命名规则全部使用小写字母,包括中间的字也是如此–按照惯例,package名称的第一部分是反顺序的类的创建者的Internet域名。•导入包(import)AccessControl(访问控制)•属性的访问控制–public访问权限:任何地方的类都可以访问到。–protected访问权限:在同一个包中的类可以访问;包外的子类可以继承,但不能访问。–默认包访问权限:在同一个包中的类可以访问到。–private访问权限:只能在定义它的类里访问。•类(普通类,非内部类)的访问控制–public访问权限:任何地方的类都可以访问到。–默认包访问权限:在同一个包中的类可以访问到。AccessControl(访问控制)•方法的访问控制–public访问权限:任何地方的类都可以访问到–protected访问权限:在同一个包中的类可以访问;包外的子类可以继承,但不能访问。–默认包访问权限:在同一个包中的类可以访问到–private访问权限:只能在定义它的类里访问当一个类可以被访问时,对类内的成员变量和成员方法而言,其应用范围可以通过施以一定的访问权限来限定。同一个类中同一个包中不同包中的子类不同包中的非子类(任意类)private★default★★protected★★★public★★★★关于继承性•子类是父类更加详细的分类•是一种一般化与特殊化的关系•Java的标准根源类java.lang.Object进行继承•继承的目的是实现代码复用•Java只支持单根继承•只是采用它的形式并在其中添加新代码,对父类进行扩展,表示“is-a”关系1.子类的定义•定义一个父类class父类名{}•定义一个子类class子类名extends父类名{}我们就说子类继承父类1.子类的定义【例3-7】创建一个A类和它的子类B类,我们通过子类B的实例对象调用从父类A继承的方法。(教材P68)2.成员变量的隐藏和方法的重写子类通过隐藏父类的成员变量和重写父类的方法,可以把父类的状态和行为改变为自身的状态和方法【例3-8】当子类中的变量名与父类的相同,父类的变量被遮盖。classAclassBextendsA{{staticintdata_a=3;staticintdata_a=5;}}classCextendsB{voidprint_out(){System.out.println(“data_a=”+data_a);System.out.println(“A.data_a=”+A.data_a);System.out.println(“B.data_a=”+B.data_a);}}classdemo{publicstaticvoidmain(Stringargs[]){Cc=newC();c.println_out();}}data_a=5A.data_a=3B.data_a=5super关键字•概念–代表当前对象的父对象的引用•用法:–直接父类对象的引用,访问父类的成员变量和方法–显式的调用父类的构造函数•注意–由JVM自己处理继承中实例的创建顺序•第一步:超类成员变量/超类初始化块(按排列顺序)•第二步:超类构造方法•第三步:子类成员变量/子类初始化块(按排列顺序)•第四步:子类构造方法注:按排列顺序是指哪个代码写在前面就先初始化谁多态性•类方法的重载是一种多态性。除此之外,多态性还可以是指在程序中需要使用父类对象的地方,都可以用子类对象来代替。例如:–publicclassEmployeeextendsObject–{……}–publicclassManagerextendsEmployee–{……}–则:–Employeee=newManager();//合法语句对多态的正确理解•相同的事物,调用相同的方法,参数也相同,但是表现出来的行为却不同•多态通过分离“做什么”和“怎么做”•多态能够改善代码的组织结构和可读性,使得程序有良好的扩展性•多态也称为动态绑定(dynamicbinding)、后期绑定(latebinding)或运行时绑定(run-timebinding)多态的三个含义•子类都能以父类的身份出现•子类以父类的身份出现,但是做事情时,还是用自己的方式来实现•子类以父类的身份出现时,自己特有的属性和行为将不能使用多态的运用•多态参数–多个方法的参数,具有相同的父类,则以父类的名义来声明方法的参数,由于子类都能以父类的身份出现,所以方法只要定义一次就可以适应各个子类了•异类集合–多个变量,具有相同的父类,则以父类的名义来声明集合的类型,由于子类都能以父类的身份出现,所以集合中可以保存各个子类的实例final:到此为止final在类之前表示该类是最终类,不能再被继承。final在方法之前表示该方法是最终方法,该方法不能被任何派生的子类覆盖。final在变量之前表示变量的值在初始化之后就不能再改变;相当于定义了一个常量。static在变量或方法之前,表明它们是属于类的,称为类方法(静态方法)或类变量(静态变量)。若无static修饰,则是实例方法和实例变量。类变量在各实例间共享classABCD{chardata;staticintshare_data;}classDemo{ABCDa,b,c,d;}objectachardataobjectcchardataObjectbchardatastaticintshare_dataobjectdchardatastatic:类变量和类方法类变量的生存期不依赖于对象,相当于C语言中全局变量的作用。其它类可以不用通过创建该类的实例,直接通过类名访问它们。publicclassStaticVar{publicstaticintnumber=5;}publicclassOtherClass{publicvoidmethod(){intx=StaticVar.nu

1 / 81
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功