java初级及高级讲解ppt - 6.包、继承、多态_第1页
java初级及高级讲解ppt - 6.包、继承、多态_第2页
java初级及高级讲解ppt - 6.包、继承、多态_第3页
java初级及高级讲解ppt - 6.包、继承、多态_第4页
java初级及高级讲解ppt - 6.包、继承、多态_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

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

文档简介

第六章

包、继承、多态2本章目标包继承访问控制方法重写、重载多态性关键字superstaticfinal3包为便于管理大型软件系统中数目众多的 类,解决类的命名冲突问题,Java引入包

(package)机制,提供类的多重类命名空间.4package语句package语句作为Java源文件的第一条语句,指明该文件中定义的类所在的包。(若缺省该语句,则指定为无名包)。语法格式:

packagepkg1[.pkg2[.pkg3…]];packagep1;publicclassTest{publicvoidm1(){ System.out.println("InclassTest,methodm1isrunning!");}}5编译和生成包Java编译器把包对应于文件系统的目录管 理,package语句中,用‘.’来指明包(目录)

的层次;Javac–d命令6import语句为使用定义在不同包中的Java类,需用import语句来引入所需要的类。语法格式:

importpkg1[.pkg2…].(classname|*);7Java包特性一个类如果未声明为public的,则只能在其所 在包中被使用,其他包中的类即使在源文件中 使用import语句也无法引入它。可以不在源文件开头使用import语句导入要使 用的有名包中的类,而是在程序代码中每次用 到该类时都给出其完整的包层次,例如publicclassTestPackage{publicstaticvoidmain(Stringargs[]){p1.Testt=newp1.Test();//每次用到时给出包层次t.m1();}}8JDK中主要的包介绍9继承(1)继承(Inheritance)是面向对象编程的核心机制之一,其本质是在已有类型基础之上进行扩充或改造,得到新的数据类型,以满足新的需要。根据需要定义Java类描述“QQ”和“QQ农场”信息:通过继承,简化QQ农场类的定义:publicclassQQ{publicStringname;publicintaccount;publicStringgetInfo(){...}}publicclassQQFarm{publicStringname;publicintaccount;publicintexperience;publicStringgetInfo(){...}}publicclassQQFarmextendsQQ{ publicintexperience;}10继承(2)Java类声明语法格式:Object类是所有Java类的最高层父类,如果在类的声明中未使用extends关键字指明其父类,则默认父类为Object类。[<修饰符>]class<类名>[extends<父类名>]{[<属性声明>][<构造方法声明>][<方法声明>]}publicclassQQ{...}等价于:publicclassQQFarmextendsQQ{...}11继承(3)Java只支持单继承,不允许多重继承。一个子类只能有一个父类一个父类可以派生出多个子类12练习按照上一页的类结构及继承关系,定义实现

Java类QQ、QQFarm、QQField。所有 的类、属性及方法均定义为public的。2.编写Java程序、创建TestQQ类型对象并测 试——访问其所有继承来的方法和属性。3.将父类QQ、QQFarm中的部分属性/方法 改为private的,然后重复2中的测试。13访问控制访问控制是指对Java类或类中成员的操作进行限制,即规定其在多大的范围内可以被直接访问。类的访问控制public的类可在任意场合被引入和使用,而非public的类只能在其所在包中被使用。类中成员的访问控制:见书6-614访问控制举例packagep1;publicclassA{ publicintm=5; protectedintn=6;}packagep2;importp1.A;publicclassBextendsA{ publicvoidmb(){ m=m+1; //合法,等价于this.m=this.m+1; n=n*2; //合法,等价于this.n=this.n*2; } publicstaticvoidmain(String[]args){ Bb=newB(); b.m=7; //合法

b.n=8; //合法

Aa=newA(); a.m=9; //合法

a.n=10; //非法

}}15方法重写什么是方法重写? 在子类中可以根据需要对从父类中继承来的方法进行重新定义,此称方法重写(Override)或覆盖。语法规则:重写方法必须和被重写方法具有相同的方法名称、参数列表和返回值类型;重写方法不能使用比被重写方法更严格的访问权限;重写方法不允许声明抛出比被重写方法范围更大的异常类型。16方法重写举例(1)publicclassQQ{publicStringname;publicintaccount;publicStringgetInfo(){ return"Name:"+name+"\t"+"account:"+account;}}publicclassQQFarm{publicStringname;publicintaccount;publicintexperience;publicStringgetInfo(){ return"Name:"+name+"\taccount:"+account+"\texperience:"+experience;}}17方法重写举例(2)publicclassQQ{ publicvoidmethod1(){…} }publicclassQQFarmextendsQQ{ privatevoidmethod1(){}//非法

}18关键字super在存在命名冲突(子类中存在方法重写或添加同名属性)的情况下,子类中的代码将自动使用子类中的同名属性或重写后的方法。也可以在子类中使用关键字super引用父类中的成分:访问父类中定义的属性

super.<属性名>调用父类中定义的成员方法

super.<方法名>(<实参列表>)19super用法举例(1)classQQ{ protectedinti=1;//用于测试同名属性,无现实含义}classQQFarmextendsQQ{protectedinti=2;//用于测试同名属性,无现实含义privateStringname="Tom";privateintage=9;publicStringgetInfo(){return"Name:"+name+"\tAge:"+age;}publicvoidtestI(){System.out.println(super.i);System.out.println(i);}}20super用法举例(2)classQQFarmextendsQQ{privateintaccount=3715500;privateStringname="THU";publicStringgetInfo(){//重写方法

returnsuper.getInfo()+"\tname:"+name;}publicvoidtestI(){//重写方法System.out.println(super.account);System.out.println(account);}}publicclassTest{publicstaticvoidmain(Stringargs[]){QQp=newQQ();System.out.println(p.getInfo());p.testI();QQFarms=newQQFarm();System.out.println(s.getInfo());s.testI();}}21练习编写应用程序,实现Java方法重写并测试。编写应用程序,测试super关键字用法。22多态性(1)多态——在Java中,子类的对象可以替代父类的对象使用。Java引用变量与所引用对象间的类型匹配关系:1.一个对象只能属于一种确定的数据类型,该类型 自对象创建直至销毁不能改变。2.一个引用类型变量可能引用(指向)多种不同类 型的对象——既可以引用其声明类型的对象,也 可以引用其声明类型的子类的对象。23多态性举例(1)publicclassQQ{privateStringname;privateintaccount;publicvoidsetName(Stringname){ =name;}publicStringgetName(){ returnname;}publicvoidsetAccount(intaccount){ this.account=account;}publicintgetAccount(){ returnaccount;}publicStringgetInfo(){ return"Name:"+name+"\tAccount:"+account;}}24多态性举例(2)publicclassQQFarmextendsQQ{privateStringexperience;publicvoidsetExperience(Stringexperience){ this.experience=experience;}publicStringgetExperience(){ returnexperience;}publicStringgetInfo(){//重写方法

returnsuper.getInfo()+"\tExperience:"+experience;}}publicclassTest{publicstaticvoidmain(String[]args){QQq=newQQ();System.out.println(q.getInfo());}}25多态性(2)引用类型数组元素相当于引用类型变量, 多态性也同样适用:一个引用类型变量如果声明为父类的类 型,但实际引用的是子类对象,那么该变 量就不能再访问子类中添加的属性和方法。QQ[]q=newQQ[3];//假定QQFarm类继承了Q类、q[0]=newQQFarm();q[1]=newQQ();QQFarmqf=newQQFarm();q.setExperience(“jack");//合法QQe=newQQ();e.setExperience(“funny");//非法26虚方法调用正常的方法调用虚方法调用(VirtualMethodInvocation)QQq=newQQ();q.getInfo();QQFarmqf=newQQFarm();qf.getInfo();QQq=newQQFarm();q.getInfo();27多态性举例(3)方法声明的参数类型为父类类型,可以使 用子类的对象作为实参调用该方法:publicclassTest{publicvoidshow(QQq){//--- System.out.println(q.getInfo());}publicstaticvoidmain(String[]args){Testt=newTest();QQq=newQQ();t.show(q);QQFarmqf=newQQFarm();t.show(qf);}}28练习编写应用程序,测试Java语言多态性。29对象造型(Casting)引用类型数据值之间的强制类型转换称为类型转换,具体规则如下:从子类到父类的类型转换可以自动进行;在多态的情况下,从父类到子类的类型转换必 须通过造型(强制类型转换)实现;无继承关系的引用类型间的转换是非法的。30instanceof运算符运算符instanceof用于检测一个对象的真正类型。31方法重载在一个类中存在多个同名方法的情况称为 方法重载(Overload),重载方法参数列表必 须不同。32this调用重载构造方法可以在构造方法的第一行使用关键字this调 用其它(重载的)构造方法。33关键字static在Java类中声明属性、方法和内部类时,可使用关键字static作为修饰符。static标记的属性或方法由整个类(所有实例)共享,如访问控制权限允许,可不必创建该类对象而直接用类名加‘.’调用。static成员也称“类成员”或“静态成员”,如“类属性”、“类变量”、“类方法”、“静态方法”等。34static属性static属性由其所在类(包括该类所有的实 例)共享,而非static属性则必须依赖具体/

特定的对象(实例)而存在。35static属性应用举例publicclassQQ{privateintid;publicstaticinttotal=0;publicQQ(){total++;id=total;}}publicclassTest{publicstaticvoidmain(Stringargs[]){QQ.total=100;System.out.println(QQ.total);QQq1=newQQ();QQq2=newQQ();System.out.println(QQ.total);}}36static方法publicclassQQ{privateintid;privatestaticinttotal=0;publicQQ(){total++;id=total;}publicintgetId(){ returnid;}publicstaticintgetTotalQQ(){ returntotal;}}publicclassTest{publicstaticvoidmain(String[]args){System.out.println(QQ.getTotalQQ());QQq1=newQQ();System.out.println(q1.getTotalQQ());System.out.println(QQ.getTotalQQ());}}37static初始化块在类的定义体中、方法的外部可包含static语句块,static块仅在其所属的类被载入时执行一次,通常用于初始化化static(类)属性.classQQ{publicstaticinttotal;static{total=100;System.out.println("instaticblock!");}}publicclassTest{publicstaticvoidmain(String[]args){System.out.println("total="+QQ.total);System.out.println("total="+QQ.total);}}38非static初始化块非static的初始化块在创建对象时被自动调用classA{privateinti=5;{ System.out.println("创建新对象---");}publicA(){}publicA(inta){System.out.println("开始执行构造方法体中语句");i=a;System.out.println("构造方法体中语句执行完毕");}}publicclassTest{publicstaticvoidmain(String[]args){newA();newA(3); }}39静态导入

温馨提示

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

评论

0/150

提交评论