




已阅读5页,还剩108页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第08章继承、抽象类和接口,8.1类的承继8.2抽象类8.3接口8.4内部类与匿名类8.5包的概念,1,8.1继承,继承是实现代码重用的一种有力手段。如果有多个类具有一些相同的属性和方法,可以将这些相同的属性和方法抽象出来定义为一个父类,在父类中定义这些属性和方法,则具有这些属性和方法的其它类可以从这个父类派生出来,不必再重新定义这些属性和方法,称这些派生而来的类为子类。,2,8.1类的继承,1.Java语言的特点有:代码的重用2.通过继承可以实现代码的复用。3.父类或超类(superclass)被继承的类4.子类(subclass)由继承而得到的类5.一个父类可以同时拥有多个子类,但由于Java中不支持多重继承,所以一个类只能有一个直接父类。,3,在Java语言中有一个称为java.lang.Object的特殊类,所有的类都是直接或间接地继承该类而得到的。,4,格式:classSubClassextendsSuperClass把SubClass声明为类SuperClass的直接子类,如果SuperClass又是某个类的子类,则SubClass同时也是该类的间接子类。,8.1.1子类的创建,5,如果没有extends关键字,则该类默认为java.lang.Object类的子类。因此,在Java中所有的类都是通过直接或间接地继承java.lang.Object类得到的。所以在此之前的所有例子均是java.lang.Object类的子类。,6,继承中的构造方法,7,1.子类的构建方法【例8.1】类的继承,/app8_1.java继承的简单例子classPerson/Person类是java.lang.Object类的子类privateStringname;/name表示姓名privateintage;/age表示年龄publicPerson()/定义无参构造方法System.out.println(“调用了个人构造方法Person()”);publicvoidSetNameAge(Stringname,intage)=name;this.age=age;,8,publicvoidshow()System.out.println(“姓名:“+name+”年龄:”+age);classStudentextendsPerson/定义Student类,继承自Person类privateStringdepartment;publicStudent()/Student的构造方法System.out.println(“调用了学生构造方法Student()”);,【例8.1】续,9,publicvoidSetDepartment(Stringdep)department=dep;System.out.println(“我是”+department+”的学生”);publicclassapp8_1/主类publicstaticvoidmain(Stringargs)Studentstu=newStudent();/创建Student对象stu.SetNameAge(“张小三”,21);/调用父类的SetNameAge()方法stu.show();/调用父类的show()方法stu.SetDepartment(“计算机系”);/调用子类SetDepartment方法,【例8.1】续,10,程序执行的结果为:调用了个人构造方法Person()调用了学生构造方法Student()姓名:张小三年龄:21我是计算机的学生,【例8.1】续,11,说明:(1)通过extends关键字,可将父类的成员继承给子类。(2)Java在执行子类的构造方法之前,会先自动调用父类中没有参数的构造方法,其目的是为了帮助继承自父类的成员做初始化的操作。(3)在严格意义上说,构造方法是不能被继承的,如父Person有一个构造方法Person(String,int),不能说子类Student也自动有一个构造方法Person(String,int),但这并不意味着子类不能调用父类的构造方法。,12,2.调用父类中特定的构造方法【例8.2】调用父类中某指定的构造方法。,1/app8_2.java调用父类中的特定构造方法2classPerson/定义Person34privateStringname;5privateintage;6publicPerson()/定义无参构造方法78System.out.println(“调用了Person的无参构造方法”);910publicPerson(Stringname,intage)/定义有参构造方法1112System.out.println(“调用了Person的有参构造方法”);13=name;14this.age=age;15,13,16publicvoidshow()1718System.out.println(“姓名:“+name+”年龄:”+age);192021classStudentextendsPerson/定义继承自Person类的子类Student2223privateStringdepartment;24publicStudent()/Student的无参构造方法2526System.out.println(“调用了学生的无参构造方法Student()”);27,【例8.2】续,14,28publicStudent(Stringname,intage,Stringdep)2930super(name,age);/调用父类的有参构造方法,在第10行定义的31department=dep;32System.out.println(“我是”+department+”的学生”);33System.out.println(“调用了学生的有参构造方法Student(Stringdep)”);343536publicclassapp8_2/主类3738publicstaticvoidmain(Stringargs)3940Studentstu1=newStudent();/创建对象,并调用无参构造方法41Studentstu2=newStudent(“李小四”,23,”信息系”);/调用有参构造方法42stu1.show();43stu2.show();4445,【例8.2】续,15,【例8.2】续,程序运行结果如下:调用了Person的无参构造方法调用了学生的无参构造方法Student()调用了Person的有参构造方法我是信息系的学生调用了学生的有参构造方法Student(Stringdep)姓名:null年龄:0姓名:李小四年龄:23,16,课堂练习:分析输出结果和程序的构造过程,17,8.1.2在子类中访问父类的成员,格式:super.super.,18,Super关键字,关键字super,提供了对父类的访问。,1.可以使用super访问父类被子类隐藏的变量或覆盖的方法。,2、可以通过Super(参数表)来调用父类中特定的构造方法。即根据super()传入的参数去调用父类中指定的构造方法,默认情况下调用的是无参构造方法。,19,子类与父类的成员变量与方法,1.子类继承父类的所有成员变量和方法,但不包括父类中的由private修饰的部分2.子类中新增加的属性和方法是对父类的扩展3.子类中定义的与父类同名的属性是对父类属性的隐藏,同名的方法是对父类方法的覆盖,20,子类与父类成员变量同名,1.子类中定义的成员变量与父类中的成员变量名称相同;2.子类在引用与父类成员变量同名的此成员变量时,默认是引用子类自己定义的成员变量,而将从父类那里继承而来的成员变量“隐藏”起来;3.如果在子类程序中要引用与子类同名的父类的成员变量时,可以使用“super”关键字来指示;,21,1/app8_3.java用protected修饰符和super关键字访问父类的成员2classPerson/定义Person34protectedStringname;5protectedintage;6publicPerson()/定义“不做事”的无参构造方法7publicPerson(Stringname,intage)/定义有参构造方法89=name;10this.age=age;1112protectedvoidshow()1314System.out.println(“姓名:“+name+”年龄:”+age);1516,【例8.3】在子类中访问父类的成员。,22,17classStudentextendsPerson/定义子类Student,其父类为Person1819privateStringdepartment;20intage=20;/新添加了一个与父类的成员变量age同名的成员变量21publicStudent(Stringxm,Stringdep)/定义Student的有参构造方法2223name=xm;/在子类里直接访问父类的protected成员24department=dep;25super.age=25;/利用super关键字将父类的成员变量age赋值为2526System.out.println(“子类Student中的成员变量age=”+age);27super.show();/去掉super而只写show()亦可28System.out.println(“系别:”+department);2930,【例8.3】续,23,【例8.3】续,31publicclassapp8_3/主类3233publicstaticvoidmain(Stringargs)3435Studentstu=newStudent(“李小四”,”信息系”);3637,程序执行结果为:子类Student中的成员变量age=20姓名:李小四年龄:25系别:信息系,24,8.1.3覆盖,对于Java中的方法而言,有两种特殊的形式,即方法的重载和方法的覆盖,前面已经论述了方法的重载。请同学们回顾:方法重载的要求?覆盖(Overriding)也称为方法的重写,是指在子类中定义名称、参数个数与类型均与父类相同的方法,用以重写父类里同名方法的功能。,25,1.覆盖父类的方法,子类在重新定义父类已有的方法时,应保持与父类完全相同的方法头声明,即应与父类有完全相同的方法名、返回值和参数类型列表。举例:见【例8.4】,26,补充:对象的上转型,27,对象的上转型,Personp;p=newStudent();,Students;s=newStudent();p=s;,28,对象上转型举例一(1),29,对象上转型举例一(2),30,对象上转型,上转型对象可通过强制类型转换成为子类对象。,31,内存分析,32,对象上转型举例二,33,对象上转型小结,父类引用可指向子类对象,方法中的参数定义为父类对象引用,实际传递的是子类对象,再去判断是哪个子类,从而去执行其方法和成员变量,从而实现程序的扩展性。,34,多态,多态是面向对象程序设计的又一重要特性。在java语言中,多态性体现在两个方面:由方法重载实现的静态多态性(编译时多态)多态和方法重写实现的动态多态性(运行时的多态)。目标:实现程序的扩展性。,35,运行时的多态(动态绑定),是指程序运行期间,判断所引用对象的实际类型(即在实际当中new的是什么对象),根据实际类型调用其方法。在程序运行期间,如果一个方法被子类重写了,且父类的引用指向子类的对象,则调用已经被重写的方法(子类中的方法。)例:Test.java,36,37,动态绑定小结,要实现动态绑定必须具备三个条件:1.要有继承2.要有重写3.父类引用指向子类对象,38,2.用父类的变量访问子类的成员,通过父类对象也可以访问子类成员。就是因为父子类的方法的覆盖,就产生了Java中的另一个主要的概念,即多态:也就是在编译时并不清楚到底调用那个方法,只有在运行时才能最终确定那个方法被调用。,39,【例8.5】利用父类对象调用子类中成员。,1/app8_5.java通过父类的对象来调用子类的成员2classPerson/定义Person34protectedStringname;5protectedintage;6publicPerson(Stringname,intage)/定义构造方法78=name;9this.age=age;1011publicvoidshow()1213System.out.println(“姓名:“+name+”年龄:”+age);1415,40,16classStudentextendsPerson/定义子类Student,其父类为Person1718privateStringdepartment;19publicStudent(Stringname,intage,Stringdep)/定义构造方法2021super(name,age);22department=dep;2324publicvoidshow()2526System.out.println(“系别:”+department);2728publicvoidsubshow()2930System.out.println(“我在子类中”);3132,【例8.5】续,41,33publicclassapp8_5/主类3435publicstaticvoidmain(Stringargs)3637Personper=newStudent(“王老五”,24,”电子”);/声明父类变量per指向对象38per.show();/利用父类对象per调用show()方法39/per.subshow();4041,程序执行结果为:系别:电子,【例8.5】续,42,classApublicvoidfun1()System.out.println(1、A-publicvoidfun1();classBextendsA/重写了fun1()方法publicvoidfun1()System.out.println(2、B-publicvoidfun1();/增加了一个fun3()方法publicvoidfun3()System.out.println(3、B-publicvoidfun3();publicclassTestpublicstaticvoidmain(Stringargs)Aa;a=newB();/父类引用指向子类对象a.fun1();,课堂练习:写出运行结果,43,8.1.4不可被继承的成员与最终类,如果父类的成员不希望被子类的成员所覆盖可以将它们声明为final。如果用final来修饰成员变量,则说明该成员变量是最终变量,即常量,程序中的其他部分可以访问,但不能修改。,44,/app8_6.java父类中的final方法不允许覆盖classAAAstaticfinaldoublepi=3.14;/声明静态常量publicfinalvoidshow()/声明最终方法System.out.println(pi=+pi);classBBBextendsAAAprivateintnum=100;publicvoidshow()/错误,不可覆盖父类的方法System.out.println(num=+num);,【例8.6】父类中被声明为final的成员不可被继承。,45,publicclassapp8_6publicstaticvoidmain(Stringargs)BBBex=newBBB();ex.show();,【例8.6】续,46,最终类,如果一个类被final修饰符所修饰和限定,那么这个类就不能有子类,而被定义为final的类通常是一些用来完成某些标准功能的类,如实现网络功能的类InetAddress、Socket等,这些类中的属性和方法固定下来,不希望通过继承来改变,保证这个类所实现的功能正确无误。,47,8.1.5Object类,在Java语言中有一个特殊类Object,该类是java.lang类库里的一个类,所有的类都是直接或间接地继承该类而得到的。,48,表8.1Object类常用的方法,49,小结,1.由继承方式创建的类称为子类,子类将父类的属性和方法继承过来,不必重新定义,并且可根据需要增加新的属性和方法。2.Java的所有类都直接或间接地继承自java.lang.Object类。3.super的使用有如下几种形式:super.变量名:引用父类成员变量。super.方法名(参数列表):调用父类成员方法。super(参数列表):调用父类构造方法,在子类构造方法中调用父类的构造方法以实现对继承自父类的成员变量的初始化,,50,继承中的final修饰符(续)1.定义类时,在class关键字前可以加上final修饰符,则这个类将不能再派生子类,即不能被其它类所继承。例如:publicfinalclassA则类A不可被继承。2.声明类的成员方法时,在返回类型前可以加上final修饰符,则方法所属的类被继承时,这个方法不会被重写。例如:publicfinalvoidmethod(),51,继承中的final修饰符(续)3.final修饰成员变量与继承无关,它表示的是变量一经赋值,其值将不能改变,也就是通过final可以定义常量,常量名一般全部大写。例如:finalintMAX_NUM=100;如果程序中试图修改由final修饰的MAX_NUM的值,将会产生编译错误。,52,作业与上机训练要求,1、创建父类Animal和子类Dog要求如下:(1)Animal(父类)中定义至少两个成员变量,一个带参数的构造方法,一个成员方法。(2)Dog(子类)中定义两个以上成员变量,隐藏父类中的一个成员变量,重写父类中的一个成员方法。(3)对子类进行实例化,输出对象的成员变量值(包括从父类继承而来的变量),调用对象的各成员方法(包括从父类继承来的方法)。2、按要求补充代码(实训书p53-57),53,提问1:分析输出结果,体会构造函数和一般成员函数的区别,54,提问2:super的使用,classFatherClasspublicintvalue;publicvoidf()value=100;System.out.println(FatherClass.value=+value);classChildClassextendsFatherClasspublicintvalue;publicvoidf()super.f();value=200;System.out.println(ChildClass.value=+value);System.out.println(value);System.out.println(super.value);publicclassTestInheritpublicstaticvoidmain(Stringargs)ChildClasscc=newChildClass();cc.f();,55,补充:访问控制,56,8.2抽象类与抽象方法,为什么要引入抽象类和抽象方法?1.一个抽象类可以定义一个统一的编程接口,使其子类表现出共同的状态和行为,但各自的细节不同。2.子类共有的行为由抽象类中的抽象方法来约束,而子类行为的具体细节则通过抽象方法的覆盖来实现,这种机制可以增加编程的灵活性。,57,8.2抽象类,用abstract修饰的类被称为抽象类。所谓抽象类就是没有具体实例对象的类。抽象类通常包括一个或多个抽象方法(只有方法说明,没有方法体),抽象类的子类必须完成父类定义的每一个抽象方法,除非该子类也是抽象类。它的主要用途是用来描述概念性的内容,这样可以提高开发效率,更好地统一用户“接口”。,58,8.2.1抽象类与抽象方法,1.abstractclass类名称成员变量;方法();/定义一般方法abstract方法();/定义抽象方法说明:抽象类中可以包含有一般方法,也可以包含有抽象方法;对于抽象方法不用完成其代码实现,而在派生的子类中实现所有抽象方法。,59,8.2.2抽象类,abstractclassAAnimalpublicStringname;publicintage;publicAAnimal(Stringname,intage)=name;this.age=age;publicvoidprint()System.out.println(名字:+name);System.out.println(大小:+age);publicabstractvoidrun();publicabstractvoidcry();,60,抽象方法与抽象类使用说明(一),含有抽象方法的类必须定义为抽象类。,classAAnimal/错误publicStringname;publicintage;publicvoidprint()System.out.println(名字:+name);System.out.println(大小:+age);publicabstractvoidrun();publicabstractvoidcry();,61,抽象方法与抽象类使用说明(二),1.不能由抽象类直接创建对象。它只能做为父类使用,由它派生的子类必须实现抽象类中所有的抽象方法,才能创建对象。2.抽象方法的实现:子类重写父类的抽象方法,增加方法体,使之成为一个非抽象方法。可以空实现。,classTestpublicstaticvoidmain(Stringargs)AAnimala;a=newAAnimal();/错误,62,classDogextendsAAnimalStringtype;publicDog(Stringname,intage)super(name,age);type=宠物狗;publicvoidrun()System.out.println(狗在跑);publicvoidcry()System.out.println(汪汪叫);,续,63,publicclassTestAAnimalpublicstaticvoidmain(Stringargs)Doga=newDog(欢欢,2);a.print();a.cry();a.run();,续,64,抽象方法与抽象类使用说明(三),1.如果子类没有实现抽象基类(父类)中所有的抽象方法,则子类也必须定义成一个抽象类。即:抽象的子类也必须使用修饰符:abstract2.可以将没有任何抽象方法的类声明为abstract,避免由这个类直接创建任何的对象。,abstractclassDogextendsAAnimalStringtype;publicDog()type=宠物狗;/publicvoidrun();publicvoidcry()System.out.println(汪汪叫);,65,classBirdextendsAAnimal/定义鸟类继承动物类Stringtype;publicBird(Stringname,intage)/构造方法初始化super(name,age);type=“鸟类”;publicvoidrun()/实现父类的抽象方法System.out.println(“鸟会飞);publicvoidcry()System.out.println(叽叽喳喳);,课堂练习:创建鸟类对象,66,思考:,抽象类可以用final声明吗?,67,8.2.2抽象类的应用,由于抽象类的目的是要根据它的格式来创建新的类,所以抽象类里的抽象方法并没有定义处理数据的方法体,而是要保留给由抽象类派生出的新类来定义。抽象类的应用见教材【例8.10】抽象类的应用举例。,68,小结,1.用abstract关键字来修饰一个类时,这个类叫做抽象类;用abstract来修饰一个方法时,该方法叫做抽象方法。2.abstract类必须被继承,abstract方法必须被重写。3.抽象类不能被实例化(直接创建对象)。4.抽象方法只需声明,而不需实现(无方法体)。,69,作业,1.书上练习112.实验34,70,复习,抽象方法abstract方法,并且没有方法体。抽象类abstract类,一般含有抽象方法。抽象类的一般用法只能做为父类被继承,不能直接实例化。只有通过子类实现抽象方法后,才能实例化。一般对于不同的子类可以有不同的实现过程。,71,提问:编写代码,假设人分为两种,一种是工人,另一种是学生,不管是工人还是学生,肯定可以说话,但说话的内容不一样。定义抽象类Person,从抽象类派生具体的子类,Worker和Student,并实现父类的抽象方法。,72,为什么要引入接口呢?,Java中不允许类的多继承,但在解决实际问题过程中,仅仅依靠单一继承在很多情况下都不能将问题的复杂性表述完整。通过接口可以实现多继承。如:Father类有playFootball(),Mother类有sing(),如果采用类的继承来产生一个Son类,则它只能从一个类中继承。要么继承Father,要么继承Mother。,73,8.3接口的概念,74,接口的声明及注意事项,如果一个抽象类中所有的方法都是抽象的,就可以将这个类用另外一种方式来定义,也就是接口定义。publicinterface接口名称extends父接口名列表publicstaticfinal数据类型成员变量名=常量;publicabstract返回值数据类型方法名(参数表);几点说明:1、interface是接口的关键字,定义接口和定义类相似。并被编译为class文件。2、接口的访问控制符只有public,如果使用public修饰符,则可以被所有类和接口使用,且接口名与文件名相同。如果不使用public,则接口只能被同一个包中的类和接口使用。,75,接口的声明及注意事项,3、接口中所有的方法都是publicabstract即公共的抽象方法。4、接口中可以有数据成员,这些数据成员默认都是publicstaticfinal即公共类常量。,76,接口声明实例,publicinterfaceFather/父亲会踢球publicabstractvoidplayFootball();/Mother.java文件名publicinterfaceMother/母亲爱唱歌publicabstractvoidsing();/Flyable.java能飞的动物publicinterfaceFlyablevoidfly();/Talkable.java能说话的动物publicinterfaceTalkablevoidtalk();,77,利用接口实现类的多重继承,所谓多重继承,是指一个子类可以有一个以上的直接父类,该子类可以继承它所有直接父类的成员。Java虽不支持多重继承,但可利用接口来实现比多重继承更强的功能。一个类实现多个接口时,在implements子句中用逗号分隔。利用接口实现类的多重继承见教材【例8.13】,78,接口的实现与多继承,publicclassSmartChildimplementsFather,MotherpublicvoidplayFootball()System.out.println(我会踢足球!);publicvoidsing()System.out.println(我会唱歌!);publicstaticvoidmain(Stringargs)SmartChildchild=newSmartChild();child.playFootball();child.sing();,79,类实现接口时的注意事项,注意:在类声明部分,用implements关键字指明该类将要实现哪些接口。实现接口的类必须在类体中给出所有方法的实现,否则该类应该声明为抽象类。接口中的方法都是public的,所以实现方法时也必须加上public,否则编译报错。,80,接口的继承,与类相似,接口也有继承性。定义一个接口时可通过extends关键字声明该新接口是某个已存在的父接口的派生接口,它将继承父接口的所有变量与方法。与类的继承不同的是,一个接口可以有一个以上的父接口,它们之间用逗号分隔,形成父接口列表。接口继承例子见教材【例8.12】接口的继承。,81,类实现接口时的注意事项,总结:1.一个接口可以继承另一个接口2.Java中不允许类的多继承,但允许接口的多继承3.在java中一个类可以实现多个接口4.一个类在继承另一个类的同时,可以实现多个接口。,82,接口回调是指:可以把使用某一接口类创建的对象的引用赋给该接口声明的接口变量,那么该接口变量就可以调用被类实现的接口中的方法。当接口变量调用被类实现的接口中的方法时,就是通知相应的对象调用接口的方法。,接口回调,83,interfaceShowMessagevoiddisplay(Strings);/接口中的方法默认都是publicclassTVimplementsShowMessagepublicvoiddisplay(Strings)/在使用接口的类中要显示表示publicSystem.out.println(s);classPCimplementsShowMessagepublicvoiddisplay(Strings)System.out.println(s);,84,publicclassEXAMPpublicstaticvoidmain(Stringargs)ShowMessagesm;/声明接口变量sm=newTV();/接口变量中存放对象的引用sm.display(“熊猫电视”);/接口回调sm=newPC();/接口变量中存放对象的引用sm.disply(“IBMPC”);/接口回调,85,小结,1、接口的概念:如果一个方法中的所有方法都是抽象的,则可以以接口的形式进行定义。2、接口定义:使用interface关键字进行定义,数据成员隐含修饰符:publicstaticfinal,方法隐含修饰符:publicabstract3、接口实现:通过类来实现,使用implements短语。4、从服务的角度来考察接口:接口刻画了一个一个具体的服务条目;接口的实现者提供相应的服务,接口的调用者享用相应的服务。,86,接口与抽象类的比较,1.接口与抽象类都不能直接实例化,通过多态性,由子类实例化。2.在抽象类中可以有自己的数据成员,也可以有非抽象的成员方法,而在接口中,只能够有静态的不能被修改的数据成员(也就是必须是publicstaticfinal的,不过在接口中一般不定义数据成员),所有的成员方法都是抽象的。3.接口与抽象类如此相似,那么该选谁呢?4.从开发上讲,优先使用接口,接口允许使用多继承。,87,作业,1.读程题见TestInterface.txt,88,作业(续),2.创建一个名为Charge(收费)的接口,其中包含一个收取费用的方法声明:publicvoidgetCharge();创建类BusCharge使用实现接口Charge,实现显示公共汽车的收费标准,如“公汽票价:1.2元/张,不计算公里数”;创建类TaxiCharge实现接口Charge,实现显示出租车车的收费标准,如“出租车:1.4元/公里,起价3元”;创建类CinemaCharge实现接口Charge,实现显示电影院的收费标准,如“电影票价:20元/张”。创建包含main()方法的测试类,测试BusCharge、TaxiCharge、CinemaCharge类的使用。,89,作业(续),3.实训书上实验41,90,8.4内部类与匿名类,内部类(InnerClass)是定义在类中的类,内部类的主要作用是将逻辑上相关的类放到一起;而匿名类(AnonymousClass)是一种特殊的内部类,它没有类名,在定义类的同时,就生成该类的一个实例,由于不会在其他地方用到该类,所以不用取名字。,91,8.4.1内部类,内部类是包含在类中的类,所以内部类也称为“嵌套类”,包含内部类的类又称为“外部类”。其实内部类可以看作是外部类的一个成员,所以内部类也称为“成员类”。,92,/Group.java内部类与外部类的访问规则内部类外部类publicclassGroupprivateintage;/声明外部类的私有成员变量publicclassStudent/声明内部类Stringname;/声明内部类的成员变量publicStudent(Stringn,inta)/定义内部类的构造方法name=n;/访问内部类的成员变量nameage=a;/访问外部类的成员变量agepublicvoidoutput()/内部类的成员方法System.out.println(“姓名:”++”;年龄:”+age);,【例8.14】内部类与外部类的访问规则。,93,publicvoidoutput()/定义外部类的成员方法Studentstu=newStudent(“刘洋”,24);/创建内部类对象stustu.output();/通过stu调用内部类的成员方法publicstaticvoidmain(Stringargs)GroupG=newGroup();G.output();,【例8.14】续,程序运行结果如下:姓名:刘洋;年龄:24,94,8.4.2匿名内部类,匿名内部类(anonymousinnerclass),是指可以利用内部类创建没有名称的对象,并利用它访问到类里的成员。,95,创建匿名内部类并访问成员的语法格式如下:(/创建匿名内部类,并执行所定义的方法new类名()/括号“()”内不允许有参数方法名(参数1,参数2,参数n)方法体语句;).方法名(参数1,参数2,参数n);匿名内部类的使用方法见教材【例8.16】,96,8.5包,包的概念与作用1.Java中,包(package)是相关类与接口的一个集合,是一种管理和组织类(包括类和接口)的机制。2.简单的来看,包就相当于是一个目录,其中可以包含类、接口、子包(相当于子目录)。其作用包括:一是能减少类的名称的冲突问题,二是能分门别类地组织各种类,三是有助于实施访问权限控制,当位于不同包的类相互访问时,会受到访问权限的约束。,97,8.5包,包的概念与作用(续)典型的,Java的类库就是按有层次的包的方式组织的。,98,8.5.2使用package语句创建包,1.格式:package包名1.包名2.包名3;,2.注意:包声明语句(package语句)必须出现在Java源文件的第一行(忽略注释行)一个Java源文件只能包含一个package语句。如果Java文件中没有package语句,则这个文件中的类位于默认包,默认包没有名字。,99,8.5.4利用import语句引用Java定义的包,位于同一个包(即同一个目录)中的类可以直接相互访问,不需要做额外操作。但,如果一个类要访问来自于另外一个包中的类,则需要通过import语句将其需要访问的类引入,否则无法使用别包中的类,编译时会报错。,100,8.5.4利用import语句引用Java定义的包,1.类名前加上该类所在的完整包路径,3.在程序起始处用import语句引入所需要的包或包中的类,以后在程序中就可以直接使用该包中的类,而无需再用包名作前缀。这是一种一劳永逸的策略,也是大多数编程者采用的做法,2.使用环境变量CLASSPATH设置所用的包的路径,三种方法:,101,8.5.4利用import语句引用Java定义的包,import语句
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 高中培训燃气知识课件
- 高一物理课件教学
- 离婚抚养权纠纷调解及子女成长环境协议
- 离婚协议书房产转让及子女抚养协议书
- 生态酒店精装修设计施工及环保设施采购合同
- 环保企业环境数据安全保密及污染防控协议
- 工业园区租赁厂房安全监管与维护协议
- 学校物业服务合同履行校园安全担保协议
- 乌鲁木齐市住宅小区租赁及社区文化活动组织合同
- 私房房屋买卖合同范本附带房屋产权清晰确认协议
- 工地剪彩活动方案
- 道路养护工程材料供应保障及进度措施
- 法院付款申请书
- 小儿心律失常的护理讲课件
- 2025-2030年积木产业市场深度调研及发展趋势与投资战略研究报告
- 校园各社团管理制度
- DB4403T 508-2024《生产经营单位锂离子电池存储使用安全规范》
- 2024年贵州省威宁彝族回族苗族自治县卫生局公开招聘试题带答案
- 2025届云南省红河州英语七下期末学业质量监测模拟试题含答案
- 2025年上海市中考数学试卷真题及解析答案
- 车辆抵押贷款逾期贷款清收合同
评论
0/150
提交评论