




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第三章面向对象高级特性本章要点类的继承继承的规则子类的构造方法方法的覆盖final关键字接口接口的规范引用数据类型的转换多态Java中的包包和访问权限修饰符类的封装和内部类主要内容类的继承1接口2Java中的包3类的封装和内部类4类的继承类的继承在Java中定义一个类时,让该类通过关键字extends继承一个已有的类,这就是类的继承被继承的类称为父类(超类,基类),新的类称为子类(派生类)。子类继承父类的所有属性和方法,同时也可以增加自己的属性和方法。使用继承假如你在为某个公司做一个企业管理软件,来管理企业的雇员,比如:
工人(Worker)有姓名、出生日期和薪酬属性,需要获得名字、年龄、薪酬和服装津贴;
主任(Officer)同样包含姓名、出生日期和薪酬属性,另外还有一个department(他所管理的部门),同样他也有获得姓名、年龄和薪酬的方法,还有一个获得交通补助的方法。你怎么做?继承是利用现有的类创建新类的过程,现有的类称作基类(或父类),创建的新类称作派生类(子类)。Java中所有的类都是通过直接或间接地继承java.lang.Object类得到的。在Java中定义一个类时,让该类通过关键字extends继承一个已有的类,这就是类的继承基类方法和属性派生类基类方法+
附加方法类的继承继承的语法
示例Employee.java
Worker.java
[修饰符]class子类名extends
父类名类的继承继承的语法☻练习Officer.javaTestOfficer.java用java中类的继承机制,实现Officer类,并设计一个测试程序TestOfficer类,来访问Officer类继承的好处实现类的重用易维护类的继承继承的规则Java中只支持单继承,也就是说每个类只能有一个父类,不允许有多重继承一个父类可以有多个子类子类继承父类所有的属性和方法,但不继承父类的构造方法
示例
TestWorker.java类的继承子类的构造方法—
子类不能继承父类的构造方法使用默认的构造方法在子类中的创建构造方法示例
Worker.java在子类中创建构造方法时,必须调用父类的构造方法子类可以在自己的构造方法中使用super关键字来调用父类的构造方法如果使用super关键字调用父类构造方法,必须写在该子类构造方法的第一行如调用的是父类中无参的构造方法,则可以不写super()如果子类中调用了父类无参的构造方法,而父类中没有无参构造方法则系统编译出错super(参数1,参数2,…);案例classPoint{//定义"点"类
//x轴坐标和y轴坐标,由于准备用于继承,故修饰为protected
protected
floatmX,mY;
publicPoint(floatx,floaty){//构造方法
mX=x;mY=y;}}classCircleextendsPoint{//定义"圆"类继承于"点"类
protected
floatmRadius;//半径
publicCircle(floatr){//构造方法
mRadius=r;}}public
classDemo{
public
static
voidmain(String[]args){Circlec=newCircle(2.5f);//实例化"圆"类对象
}}本例将报出错误构造方法的执行顺序当实例化子类的对象时,必须先执行父类的构造方法,然后再执行子类的构造方法;如果父类还有更上级的父类,就会先调用最高父类的构造方法,再逐个依次地将所有继承关系的父类构造方法全部执行;如果父类的构造方法执行失败,那么子类的对象也将无法实例化。super关键字调用父类的方法publicclassSoftwareTeacherextendsTeacher{publicSoftwareTeacher
(StringmyName,StringmyCenter){super(myName,myCenter);}}子类的构造方法中,通过super关键字调用父类的构造方法方法重写后,通过super关键字调用父类的普通方法publicclassSoftwareTeacher
extendsTeacher{publicvoidgiveLesson(){System.out.println("使用电脑授课");super.giveLesson();}}通过调用父类的构造方法,完成对属性值的初始化通过调用父类的普通方法,完成部分功能super总结调用父类的构造函数super(parametersopt)调用父类的构造函数。必须是子类构造函数的第一条语句。如果子类中没有显式地调用父类的构造函数,那么将自动调用父类不带参数的构造函数。父类的构造函数在子类构造函数之前执行。调用父类的成员super.datasuper.method(parameters)类的继承给定以下代码:下列描述哪些是正确的_____?A.编译失败B.代码正常运行
C.在第7行抛出异常D.在第2行抛出异常答案:A类的继承☻练习Officer.java在Officer类中,创建一个构造方法,要求在调用该构造方法时,可以对name、birth、salary、department属性赋初值类的继承方法的覆盖(override)
重写(rewrite)对从父类中继承来的方法进行改造在子类继承父类时发生示例TestOffice_1.java方法覆盖的规则在子类中的覆盖方法与父类中被覆盖的方法应具有相同的方法名相同的参数列表(参数数量、参数类型、参数顺序都要相同)相同的返回值类型子类覆盖方法的访问权限要不小于父类中被覆盖方法的访问权限
类的继承☻练习给定类,在其子类中下列哪些覆盖方法可以正确的声明_____classA{intmethod1(inta,doubleb){return0;}A.
intmethod1(inta,doubleb){return1;}B.
intmethod1(inta,longb){return1;}C.intmethod1(intb,doublea){return1;}D.
shortmethod1(inta,doubleb){return1:}E.
intmethod1(doubleb,inta){return1;}
答案:AC类的继承☻练习给定下列代码:当在第6行加入什么方法时会引起编译错误?答案:B方法覆盖注意仅当方法是可访问的实例方法时,才能被覆盖,即私有方法不能被覆盖。静态方法不能被覆盖,如果静态方法在子类中重新定义,那么父类方法将被隐藏。一旦父类中的方法被覆盖,则不能从子类外部访问被覆盖的方法。在子类中可以使用super引用被覆盖的方法。重写(覆盖)与重载方法的重载:定义有相同名字,但参数不同的多个方法构成重载方法的重写:方法的重写必须和被重写的方法具有相同的名字,参数,返回值类型。构造方法也可以重载。类的继承final关键字final可以修饰的元素:类:不能被继承变量(属性和局部变量):不能被重新赋值在声明的同时赋值系统不会对final属性默认的赋初始值方法:不能在子类中被覆盖,即不能修改。
1.final修饰成员变量final修饰变量,则成为常量,例如
finaltypevariableName;修饰成员变量时,定义时同时给出初始值,而修饰局部变量时不做要求。
2.final修饰成员方法final修饰方法,则该方法不能被子类重写。finalreturnTypemethodName(paramList){…}3.final类final修饰类,则类不能被继承。如果一个类被final关键字修饰,说明这个类不能再被其他类所继承,该类被称为最终类。
finalclassfinalClassName{
…
}
在默认情况下,所有的成员变量或成员方法都可以被隐藏或重写,如果父类的成员不希望被子类的成员所隐藏或重写则将其声明为final。classep4_12_a{ staticfinaldoublepi=3.1415926;//声明静态常量
publicfinalvoidf(){//声明最终方法
System.out.println("pi="+pi); }}classep4_12_bextendsep4_12_a{ intnum=100; privatevoidf(){//出错,不可覆盖父类的最终方法
System.out.println("num="+num); }}classep4_12{ publicstaticvoidmain(Stringargs[]){ ep4_12_bOne=newep4_12_b(); One.f(); }}练习☻练习Shape.javaRect.javaCircle.javaSquare.javaTestShape.java设计一个形状类:属性:周长和面积;方法:求周长和求面积形状类的子类:Rect(矩形),Circle(圆形)Rect类的子类:Square(正方形)不同的子类会有不同的构造方法及计算周长和面积的方法写一个测试类,在main方法中创建三个不同的形状对象,放在Shape类型的数组里,分别打印出每个对象的周长和面积Contents类的继承1接口2Java中的包3类的封装和内部类4接口(interface)抽象方法只有方法声明,没有方法实现的方法[访问权限修饰符]abstract返回值类型
抽象方法名(参数列表);classA{
abstractintmethod1(inta,intb);}构造方法、静态方法、私有方法、final方法不能被声明为抽象的方法。接口(interface)抽象类抽象类是抽象方法和非抽象方法的集合特殊情况全部是抽象方法全部为非抽象方法[访问权限修饰符]abstractclass类名{……}
abtractclassA{Stringname;
abstractintmethod1(inta,intb);
voidsayHi(){System.out.println(“Hello!”);}接口(interface)抽象类注意:抽象类不能被实例化;其包含的抽象方法必须在其子类中被实现,否则该子类只能声明为abstract;抽象方法不能为static;如果从一个抽象类继承,并想创建该新类的对象,那么我们就必须为基类中的所有抽象方法提供方法定义。在下列情况下,一个类必须声明为抽象类:
当一个类的一个或多个方法是抽象方法时;当类是一个抽象类的子类,并且没有实现父类的所有抽象方法,即只实现部分;当一个类实现一个接口,并且不能为全部抽象方法都提供实现时;抽象类的使用——创建抽象类的对象创建抽象类的对象–扩展抽象类,实现其所有抽象方法–创建该抽象类子类的对象31抽象类例子publicclassCircleextendsShape{publicvoiddraw(){System.out.println("drawacircle....");}}TestShape.javapublicstaticvoidmain(String[]args){
//Shapeshape=newShape();//error,shape是一个抽象类
Shapeshape=newCircle();shape.draw();System.out.println(shape.getArea());}32publicabstractclassShape{/**画出自己*/
publicabstractvoiddraw();/**得到面积*/publicdoublegetArea(){return100.0;}}可行吗?接口(interface)☻练习给定以下代码:
执行下列哪些操作后,可以让代码通过编译?对methodA方法添加方法体将5~7行,用“;”代替删除class前的abstract关键字删除methodA方法前的abstract关键字删除methodB方法前的abstract关键字答案:BE接口(interface)☻练习Animal.javaFish.java按下面的类图,创建一个抽象类,该抽象类有字符串类型的eyecolor属性抽象方法stayIn,返回值类型为void方法showEye,返回值类型String接口(interface)接口的声明接口是一种特殊的抽象类,这种抽象类中只包含常量和抽象方法,而没有变量和方法的实现接口的成员:常量(字段)抽象方法[访问权限修饰符]interface接口名
{
接口的成员}接口(interface)接口的声明注意:接口不是一个类,没有构造方法,不能被实例化接口使用interface关键字来定义,而不是class接口默认:常量:publicstaticfinal抽象方法:publicabstractinterfaceRunnable{publicabstractvoidrun();}接口(interface)☻练习给定以下代码:下列选项中,哪些选项可以用来替代第2行代码?finalintk=4;Publicintk=4;Staticintk=4;Privateintk=4;Abstractintk=4;答案:ABC接口(interface)☻练习
下列选项中,哪些可以定义在一个接口中?答案:AB接口(interface)☻练习VideoDevice.javaAudioDevice.java定义一个接口VideoDevice,表示可视设备,该接口中有:MIN_BRITGHTNESS常量,其值为10,表示最小亮度打开方法:turnOn()关闭方法:turnOff()定义一个接口AudioDevice,表示可视设备,该接口中有:MIN_VOLUME常量,其值为5,表示最小音量打开方法:turnOn()关闭方法:turnOff()调节音量方法:turnVolume(intvolume)接口(interface)extendsinterfaceAextendsB{}interfaceinterfaceinterfaceextendsinterfaceAextendsB,C,D
{}interfaceextends
扩展接口(接口的继承)接口(interface)类实现接口—implements为了使用一个接口,你要编写实现接口的类如果一个类要实现一个接口,那么这个类就必须实现接口中所有抽象方法。否则这个类只能声明为抽象类多个无关的类可以实现一个接口,一个类可以实现多个无关的接口一个类可以在继承一个父类的同时,实现一个或多个接口接口(interface)
☻练习
Runnable.javaBird.javaFlyable.java根据以下类图实现Runnable接口和Fylable接口设计一个类Bird,类Bird实现了以上两个接口,并设计一个main(),测试Bird类,得到以下测试结果Thebirdisrunningwithitsfeet!Thebirdisflyingwithitswings!接口(interface)
类的单继承与多实现接口(interface)类实现接口☻练习Student.javaConsumer.javaPerson.java创建一个Student类该类继承了Person类,并实现了Consumer接口该类具有String类型的属性school并有一个study方法,在该方法中,系统可打印出学生在那所学校学习并创建一个测试方法,测试Student类接口(interface)接口的意义:接口可以实现多继承:用接口可以实现混合类型(主类型,副类型),java中可以通过接口分出主次类型主类型使用继承,副类型,使用接口实现接口可以使方法的定义和实现相分离,降低模块间或系统间的耦合性针对接口编程可以屏蔽不同实现间的差异,看到的只是实现好的功能。接口(interface)classCatextendsAnimalimplementsRunnable{}☻练习
Cat.javaTestCat.java
编写代码实现以下类的关系其中,Cat有:属性:furcolor(毛的颜色)、name(名字)构造方法:一个有参的构造方法,可以满足在创建对象的同时,为其名字属性赋初值一个无参的构造方法方法:climbTree(),调用该方法将打印“Icouldclimbtree!”接口(interface)引用数据类型的转换(对象造型)示例:TestStudent.java向上转型(Upcasting)—子类转换为父类,自动转换;前提—具有继承或实现关系向上转换损失了子类新扩展的属性和方法仅可以使用从父类中继承的属性和方法接口(interface)引用数据类型的转换示例:TestStudent.java向下转型(Downcasting):强制转换将父类对象显示的转换成子类类型。Animala=newCat();Catc=(Cat)a;接口(interface)instanceof运算符判断一个类是否实现了某个接口判断一个实例对象是否属于一个类它的返回值是boolean型的
对象
instanceof
接口
对象
instanceof
类多态引入实例开发教员类,其中教员分为Java教员以及.NET教员,各自的要求如下:Java教员属性:姓名,所属中心方法:授课(步骤:打开Eclipse,实施理论课授课),自我介绍.NET教员属性:姓名,所属中心方法:授课(步骤:打开VS,实施理论课授课),自我介绍代码:TestTeacher.java为什么需要使用多态在教员类的基础上,开发一个类代表总部,负责对各教员进行评估,评估的内容包括:1、教员的自我介绍;2、教员的授课;解决方法一:TestTeacherDuo_1.java前一方法存在的问题:违反了open-close原则
当一个软件的需求发生改变时,我们能够以添加新的代码的方式,而不是修改原来代码的方式来适应需求的更改,如晨能做到这一点,就满足open-close原则。第二种解决方案——多态TestTeacherDuo_2.java多态(动态绑定、晚绑定Polymorphism
)一个对象具有多种特征,根据不同的情况来做出不同的响应当调用实例方法时,由Java虚拟机动态地决定所调用的方法,称为动态绑定(dynamicbinding)或为多态(polymorphism)。如何实现多态publicclassTeacher{publicvoidgiveLesson(){
System.out.println("知识点讲解");}}publicclassTest{publicstaticvoidmain(String[]args){SchoolManagersm=newSchoolManager();
sm.manage(newSoftwareTeacher());}}3publicclassSoftwareTeacher
extendsTeacher{
publicvoidgiveLesson(){
System.out.println("使用电脑授课");
super.giveLesson();
}}1publicclassSchoolManager{publicvoidmanage(Teachert){
t.giveLesson();
}}2三个条件:1)要有方法的重写2)要有继承/实现4)父类引用指向子类对象在Java语言中,多态性的实现有两种方式:1、覆盖实现多态性——动态多态2、重载实现多态性——静态多态多态的优点简化代码改善代码的组织性和可读性易于扩展多态为什么可以这样做子类可以无条件的给父类赋值,而且永远是安全的,但父类给子类赋值是危险的。给定如下Java代码,编译运行后,输出结果是什么classBase{publicStringname;publicBase(){name="Base";}publicBase(StringpName){name=pName;}publicvoidmethod(){System.out.println(name);}}classChildextendsBase{publicChild(){super("Child1");name="Child2";}}publicclassSample{publicstaticvoidmain(String[]args){
Childc=newChild();c.method();
}}
Child2控制台输出123课外练习☻练习Cola公司的雇员分为以下若干类:ColaEmployee:这是所有员工总的父类,属性:员工的姓名,员工的生日月份。方法:getSalary(intmonth)根据参数月份来确定工资,如果该月员工过生日,则公司会额外奖励100元。SalariedEmployee:Employee的子类,拿固定工资的员工。属性:月薪HourlyEmployee:Employee的子类,按小时拿工资的员工,每月工作超出160小时的部分按照1.5倍工资发放。属性:每小时的工资、每月工作的小时数练习☻练习SalesEmployee:Employee的子类,销售人员,工资由月销售额和提成率决定。属性:月销售额、提成率定义一个类Company,在该类中写一个函数,调用该函数可以打印出某月某个员工的工资数额,写一个main方法,把若干各种类型的员工放在一个ColaEmployee数组里,并单元出数组中每个员工当月的工资Contents类的继承1接口2Java中的包3类的封装和内部类4Java中的包包的概念及应用在Java中,包主要有以下用途:包允许将类组合成较小的单元有助于避免命名冲突
包允许在更广的范围内保护类、数据和方法包可以是类、接口和子包的集合Java中的包包的概念及应用将类放入包中
注意:在java中位于包中的类,在文件系统中的存放位置,必须有与包名层次相对应的目录结构package语句作为java源文件的第一条语句每个源文件只能声明一个包如果没有package语句,则默认为无名包
package
包名;Java中的包访问其它包中的类使用包名.类名前缀使用import关键字引入其它包中的类位于同一包中的类可以直接访问packagetest;importp08.Animal;classCatextendsAnimal{…}CardClass.P200_Cardmy200=newardClass.P200_Card();System.out.println(my200.toString());Java中的包访问其他包中的类导入包中所有的类导入子包中所有的类导入包中的某个类
import
包名.*;
import
包名.子包名.*;
import
包名.子包名.类名;常用包(一)1.java.lang包该包是Java语言的核心类库,包含了运行Java程序必不可少的系统类,如基本数据类型、基本数学函数、字符串处理、线程、异常处理类等。每个Java程序运行时,系统都会自动引入java.lang包,所以这个包的加载是缺省的。2.java.io包该包是Java语言的标准输入/输出类库,包含了实现Java程序与操作系统、用户界面以及其它Java程序做数据交换所使用的类。如基本输入/输出流、文件输入/输出流、过滤输入/输出流、管道输入/输出流、随机输入/输出流等。
常用包(二)3.java.util包
该包包含了Java语言中的一些低级的使用工具,如处理时间的Date类、处理变长数组的Vector类,实现栈和散列表的Stack类和HashTable类等。4.java.awt包
该包是Java语言用来构建图形用户界面(GUI)的类库,它包括了许多界面元素和资源,主要提供三方面的支持:低级绘图操作,如Graphics类等;图形界面组件和布局管理,如Checkbox类、Container类、LayoutManager接口等;界面用户交互控制和事件响应,如Event类。
常用包(三)5.java.awt.image包
该包用来处理和操纵来自网上的图片的Java工具类库。6.java.awt.peer包该包的作用是使同一个Java程序在不同的软、硬件平台上运行时,具有相同的用户界面;它是程序代码和平台之间的中介,将不同的平台包裹、隐藏起来,使之在用户面前呈现相同的面貌;该包是实现Java语言跨平台特性的手段之一。常用包(四)7.java.applet包
该包是用来实现运行于Internet浏览器中的JavaApplet的工具类库,它仅包含少量的几个接口和一个非常有用的类:java.applet.Applet。8.包
该包是Java语言用来实现网络功能的类库,主要包括:底层的网络通信,如Socket类、ServerSocket类;编写用户自己的Telnet、FTP、邮件服务等实现网上服务的类;用于访问Internet上资源和进行CGI网关调用的类,如URL等。
Java中的包把自己的类打包使用java命令行参数jar-cvfanimal.jar*.*Java中的包访问权限修饰符用来控制类的成员和类的使用范围类成员的访问权限修饰符:private、default、protected、public类的访问权限修饰符:public、default
privatedefaultprotectedpublic同一类√√√√同一包中的类√√√不同包中的子类√√其他包中的类√Java中的包访问权限修饰符课堂练习1、下列关于变量的叙述哪个是错的?()A.实例变量是类的成员变量。B.在方法中定义的局部变量在该方法被执行时创建。C.实例变量用关键字static声明。D.局部变量在使用前必须被初始化。解答:C2、不允许作为类成员的访问控制符的是()。A.public B.privateC.static D.protected解答:C3、为AB类的一个无形式参数无返回值的方法method书写方法头,使得使用类名AB作为前缀就可以调用它,该方法头的形式为()。A、staticvoidmethod() B、publicvoidmethod()C、finalvoidmethod() D、abstractvoidmethod()解答:A4、可以在下面代码段pointx处写入的是?()//pointxpublicclassInteresting{//dosomething}A.Stringstr;B. staticintPI=4.14;C. publicclassMyClass{//dootherthing…}D.importjava.awt.*;解答:D5、已知A类被打包在packageA,B类被打包在packageB,且B类被声明为public,且有一个成员变量x被声明为protected控制方式。C类也位于packageA包,且继承了B类。则以下说法正确的是:()A、A类的实例不能访问到B类的实例B、A类的实例能够访问到B类一个实例的x成员C、C类的实例可以访问到B类一个实例的x成员D、C类的实例不能访问到B类的实例解答:C6、下列命题为真的是:()A、所有类都必须定义一个构造函数。B、构造函数必须有返回值。C、构造函数可以访问类的非静态成员。D、构造函数必须初始化类的所有数据成员。解答:C7、在Java中,关于final关键字的说法正确的是()A、如果修饰变量,则一旦赋了值,就等同一个常量。B、如果修饰类,则该类只能被一个子类继承。C、如果修饰方法,则该方法不能在子类中被覆盖。D、如果修饰方法,则该方法所在的类不能被继承。解答:A,C8、在Java中,下面关于包的陈述中正确的是()A、包的声明必须是源文件的第一句代码。B、包的声明必须紧跟在import语句的后面。C、只有公共类才能放在包中。D、可以将多个源文件中的类放在同一个包中。解答:A,DContents类的继承1接口2Java中的包3类的封装和内部类4类的封装和内部类类的封装将类的成员变量声明为私有的(private),再提供一个或多个共有(public)方法实现对该成员变量的访问或修改,这种方式就被称为封装封装的目的隐藏类的实现细节让使用者只能通过事先定制好的方法来访问数据,可以方便地加入控制逻辑,限制对属性的不合理操作便于修改,增强代码的可维护性可进行数据检查类的封装和内部类☻练习TestPerson_fenzhuan.java修改原来的Person类,将其进行良好的封装类的封装和内部类内部类(嵌套类)内部类就是定义在另一个类内部的类。内部类对于同一包中的其它类来说,内部类能够隐藏起来。注意内部类可以访问其外部类中所有的属性和方法无需创建外部类的对象,即可从内部类访问外部类的变量和方法。必须创建内部类的对象,否则无法从外部类访问内部类的变量和方法。如果内部类中有和外部类同名的变量或方法,则内部类的变量和方法将获得比外部类的变量和方法更高的优先级。不能定义static变量类的封装和内部类类中定义的内部类普通类的访问权限修饰符defaultpublic内部类的访问权限修饰符defaultpublicprotectedprivate类的封装和内部类内部类的访问在Outer内访问Inner,只需如下:在Outer外访问Inner,必须如下:
Innerin=newInner();Outero=newOuter();//实例化外部类
Outer.Inneroi=o.newInner();//实例化内部类内部类示例(OuterTest.java)publicclassOuter{privateinta=5;publicclassInner{privateinti=1;publicvoidmyMethod(){System.out.println("a="+a+",i="+i);}}publicstaticvoidmain(String[]args){Outer.InnerinnerClass=newOuter().newInner();innerClass.myMethod();}}内部类特性
一般用在定义它的类内部或语句块之内,在外部引用它时必须给出完整的名称.名字不能与包含它的类名相同。
可以使用包含它的类的静态和实例成员变量,也可以使用它所在方法的局部变量。
可以定义为abstract,可以被其它的内部类继承。
可以声明为private或protected类内部。
若被声明为static,就变成了顶层类,不能再使用局部变量(在内部类不需要访问外围类对象的时候使用)。
若想在InnerClass中声明任何static成员,则该InnerClass必须声明为static。成员类静态成员类局部类匿名类内部类有多种形式1、成员类例:简单的内部类classB{B(){System.out.println("instanceofB.");}
classInnerB{//定义内部类
InnerB(){System.out.println("InstanceofInnerB.");}}}classA{publicstaticvoidmain(String[]args){Bbbb=newB();B.InnerBinbbb=bbb.newInnerB(); //创建内部类对象
System.out.println();inbbb=newB().newInnerB(); }}成员类的特点:创建一个内部类的对象,必须先有一个外包类的对象存在。外包类与其内部类之间完全互相信任。例:classB{privateintx=100;classInnerB{privateinty=1111/*,x=8888*/;voidshow(){System.out.println(x);//访问B的private成员
System.out.println(y+"\n");}}publicvoidshow(){//外包类的方法
InnerBinB=newInnerB(); //创建内部类对象
System.out.println(inB);System.out.println(inB.y+"\n");//访问InnerB的私有成员
inB.show();}}classA{publicstaticvoidmain(String[]args){newB().newInnerB().show();newB().show();}}2、静态成员类静态成员类的特点:只与外部类有关系,而不依赖于外部类的对象。因而静态成员类的创建不需要有外部类的存在。例:classB{protectedstaticclassInnerB{}//静态成员类}classA{publicstaticvoidmain(String[]args){//System.out.println(newB());B.InnerBinB=newB.InnerB();System.out.println(inB);//System.out.println(newB.InnerB());}}静态内部类示例(OuterTest.java)publicclassOuterTest{publicstaticintouterInt=5;publicstaticclassStaticInner{publicstaticintdoubleVal(intn){System.out.println("outerInt="+outerInt);return2*n;}}publicvoidtestInner(){inta=5;System.out.println("a="+a+",doubleVal="+StaticInner.doubleVal(a));}publicstaticvoidmain(String[]args){intn=7;System.out.println("n="+n+",doubleVal="+OuterTest.StaticInner.doubleVal(7));OuterTestout=newOuterTest();out.testInner();}}3、局部类局部类定义在方法体内因而外部不可访问。不需要访问修饰符。注意:局部类的对象在堆中创建局部类可以访问外包方法之外的类的一切成员。局部类只能访问外包方法的final局部变量。
4.匿名类匿名类的特点:匿名类没有类名,它必须继承一个类或者实现一个接口,并且不能有显示的extends或implements子句。匿名类不能有构造方法,因为它没有类名。可以通过new<父类名>的方法创建其对象,匿名类的创建与定义同时进行。匿名类只能一次性的创建其对象,由其父类句柄持有。匿名类既可以在方法体中,也可以在参数列表中。匿名类必须简单。4、匿名类例:匿名类示例abstractclassC{abstractvoidfoo();}classB{publicCgo(intx,finalinty){returnnewC(){publicvoidfoo(){System.out.println(y);}};//匿名类的定义是一个语句,要以;结束
}publicvoidgogo(Cc00){c00.foo();}}匿名类publicclassA{publicstaticvoidmain(String[]args){Ccccc=newB().go(1,2);cccc.foo();Ccc=newB().go(1,20);newB().gogo(cc);newB().gogo(newC(){publicvoidfoo(){
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 农村基础设施改扩建项目可行性研究报告
- 2024年南平武夷新区某部门招聘笔试参考题库附带答案详解
- 第二单元综合性学习《倡导低碳生活》 教学设计 2023-2024学年统编版语文八年级下册
- 山东省烟台龙口市(五四制)2023-2024学年六年级下学期期中语文试题(解析版)
- 第六单元诗词曲五首《南乡子·登京口北固亭有怀》辛弃疾教学设计-2024-2025学年统编版语文九年级下册标签标题
- 2024年山东省环保发展集团有限公司总部纪检岗位招聘3人笔试参考题库附带答案详解
- 2024年安徽马鞍山市公共交通集团有限责任公司招聘25人笔试参考题库附带答案详解
- 第1章 活动1 认识信息技术(第1课时)(一、信息媒体 二、信息技术的应用) 教学设计2024-2025学年 人教版七年级上册
- 4《我们的公共生活》第一课时 教学设计-2023-2024学年道德与法治五年级下册统编版
- 2025年强振加速度仪项目建议书
- 2022新教材苏教版科学5五年级下册全册教学设计
- 2024-2025学年全国中学生天文知识竞赛考试题库(含答案)
- 加利福尼亚批判性思维技能测试后测试卷班附有答案
- EN248表面处理测试标准
- 云南省普通初中学生成长记录
- 工程结算书(完整版)
- 仿真技术在车架防腐性能开发中的应用
- 初一平面直角坐标系集体备课
- 公务员登记表
- 高一年级英语必修二学科导学案全册
- 胡菊仁爱版九年级英语上教学计划及教学进度表
评论
0/150
提交评论