收藏 分销(赏)

第4章 类与对象的基本概念.ppt

上传人:xrp****65 文档编号:13218193 上传时间:2026-02-04 格式:PPT 页数:133 大小:711.50KB 下载积分:10 金币
下载 相关 举报
第4章 类与对象的基本概念.ppt_第1页
第1页 / 共133页
第4章 类与对象的基本概念.ppt_第2页
第2页 / 共133页


点击查看更多>>
资源描述
Java EE,基础教程,*,*,JavaEE,基础教程,第,4,章类与对象的基本概念,4.1,类与对象的概念,4.2,类的访问权限与包的概念,4.1,类与对象的概念,返回,类是实现,Java,面向对象程序设计的基础,是对基本数据类型的扩充。类封装了对象的行为和属性,它是具有相同特征的同类对象的抽象模型(,temp1ate,),利用这个抽象模型可以构造具体的实例对象(,instance,)。,2026/2/4 周三,2,Java EE,基础教程,对象是,Java,程序中最核心、最基础的部分。对象在现实生活中是很普通的概念。所有的物体都可以被视为对象,大到宇宙,小到原子,都可以将其看作是对象。我们时常与对象在打交道,我们用的钢笔、骑的自行车、乘的公交车等。而我们经常见到的卡车、公交车、小轿车等都会涉及以下几个重要的物理量:可乘载的人数、运行速度、发动机的排量、耗油量、自重、轮子数目等。另外,还有加速、减速、刹车、转弯、播放音乐等几个重要的功能,这些功能称作是他们具有的方法。一个对象具有本身的属性即特征,这些特征决定对象的状态,对象还可通过自己的行为,不断改变自己的状态。,2026/2/4 周三,3,Java EE,基础教程,类与对象的关系犹如图纸与零件关系,先有图纸后有零件,图纸描述了零件的共同特征,零件是按图纸制造出来的。在程序中只能有类的一个定义,但该类可以有多个实例对象。在,Java,编程语言中使用,new,运算符实例化对象。,要学习,Java,编程就必须首先学会怎样去写类,即怎样用,Java,的语法去描述对象共有的属性和功能。属性通过变量来刻画,功能通过方法来体现。类把属性和对属性的操作封装成一个整体。,Java,程序设计就是从类的设计开始的。,基于对象的编程更加符合人的思维模式,编写的程序更加健壮和强大。更重要的是,面向对象编程鼓励创造性的程序设计。,2026/2/4 周三,4,Java EE,基础教程,4.1.1,类的声明,类由关键词,calss,来定义。一个类的定义包括两个部分:类声明和类体。类体的内容由两部分构成,一部分是变量的定义,用来刻画属性;另一部分是方法的定义,用来描述功能。,2026/2/4 周三,5,Java EE,基础教程,类的定义的基本格式为:,publicabstract|final,class,className,extends,superclassName,implements,interfaceNameList,public|protected|private static final transient volatile type,variableName,;/,成员变量,public|protected|private static final|abstract native synchronized,returnType,methodName(paramList,)throws,exceptionList,statements /,成员方法,其中,修饰符,public,、,abstract,、,final,说明了类的属性,,className,为类名,,superclassName,为类的父类的名字,,interfaceNameList,为类所实现的接口列表。,2026/2/4 周三,6,Java EE,基础教程,1,类的成员变量,在类中声明的变量就是成员变量,作用域是整个类。类的成员变量分为类成员变量和实例成员变量。类的成员变量的声明方式如下:,public|protected|private static final transient volatile type,variableName,;,其中:,public,:公有变量。,protected,:保护变量。,private,:私有变量。,static:,静态变量(类成员变量),相对于实例成员变量。,final:,常量。,transient:,暂时性变量,用于对象存档。,volatile:,贡献变量,用于并发线程的共享。,2026/2/4 周三,7,Java EE,基础教程,2,类的成员方法,成员方法描述对象所具有的功能或操作,反映对象的行为,是具有某种相对独立功能的程序模块。一个类或对象可以有多个成员方法,对象通过执行它的成员方法对传来的消息作出响应,完成特定的功能。,成员方法一旦定义,便可在不同的场合中多次调用,故可增强程序结构的清晰度,提高编程效率。,成员方法的结构包括两部分内容:方法声明和方法体。方法声明包括方法名、返回类型和外部参数。其中参数的类型可以是简单数据类型,也可以是引用数据类型。,2026/2/4 周三,8,Java EE,基础教程,成员方法的定义方式如下:,public|protected|private ,staticfinal|abstract,native synchronized,returnType,methodName,(,paramList,)throws,exceptionList,statements,2026/2/4 周三,9,Java EE,基础教程,方法声明中的限定词的含义:,public,:公共访问控制符。,private,:私有访问控制符。,protected,:保护访问控制符。,static:,类方法,可通过类名直接调用。,abstract:,抽象成员方法,没有方法体。,final:,方法不能被重写。,native:,本地成员方法修饰符,集成其它语言的代码。,synchronized:,控制多个并发线程的访问。,2026/2/4 周三,10,Java EE,基础教程,下面是一个类名为“梯形”的类,类体内容的变量定义部分定义了,4,个,float,类型的变量“上底”,“下底”,“高”和“,laderArea,”,。方法定义部分定义了两个方法“计算面积,()”,和“修改高,()”,。,class,梯形,float,上底,下底,高,,laderArea,;,float,计算面积,(),laderArea,=(,上底,+,下底,)*,高,/2.0f,;,return,laderArea,;,void,修改高,(float h),高,=h,;,类体变量定义部分所定义的变量被称为类的成员变量。在方法体中定义的变量和方法的参数被称为局部变量。,成员变量和局部变量的类型可以是,Java,中的任何一种数据类型,包括基本类型整型、浮点型、字符型、引用类型。,2026/2/4 周三,11,Java EE,基础教程,成员变量在整个类内都有效,局部变量只在定义它的方法内有效。例如:,class,LocalVariable,int,distance;,int,find(),int,a=12;,distance=a;/,合法,,distance,在整个类内有效。,return distance;,void,gety,(),int,y;,y=a;/,非法,,a,是局部变量,这里无法访问,2026/2/4 周三,12,Java EE,基础教程,例,4-1,创建一个类,该类含有类的成员变量和成员方法,并对所创建的类进行测试。,程序清单:,ch04Text1.java,class Text1,static,int,a;/,当被定义为,static,类型时,为类变量,可被对象或类调用,int,b;/,实例对象变量,只能被对象调用,public void,display(int,a,int,b)/,成员方法,System.out.println(static,int,a=+a);,System.out.println,(,int,b=+b);,public static void,display(int,b)/,类方法,可通过类名直接调用,System.out.println(static,display:,int,b=+b);,2026/2/4 周三,13,Java EE,基础教程,public static void,main(String,args,),Text1,tt,=new Text1();/,创建实例对象,tt,t t.display(5,6);/,不可以,Text1.display(5,6),;因为对象变量或对象方法只能被对象,tt,调用,Text1.display(0);/,当被定义为,static,类型时,为类方法,可被对象或类调用,tt.display(23);,tt.a,=9;,Text1.a=24;,tt.b,=3;,tt.display(a,15);,2026/2/4 周三,14,Java EE,基础教程,例,4-2,创建一个类,该类含有判断质数的成员方法,测试时从键盘输入一个数,判断是否为质数。读键盘采用,Scanner,类的,nextInt,(),方法。,程序清单:,ch04PrimeNumber.java,import,java.util.Scanner,;,public class,PrimeNumber,/*,用,(,int,),Math.sqrt(n,),求出循环上限,,isPrime,(),方法用来检测当前数是否为质数*,/,public static,boolean,isPrime(int,num),boolean,prime=true;,int,limit=(,int,),Math.sqrt(num,);,for(,int,i=2;i=limit;i+),if(num%i=0),prime=false;,break;,return prime;,2026/2/4 周三,15,Java EE,基础教程,public static void,main(String,args,),Scanner input=new,Scanner(System.in,);,System.out.print,(,请输入您要判断的数:,);,int,n=,input.nextInt,();,if(,isPrime(n,),System.out.println(n,+,是质数!,);,else,System.out.println(n,+,不是质数!,);,2026/2/4 周三,16,Java EE,基础教程,4.1.2,方法重载,方法重载指一个类中有多个方法享有相同的名字,但是这些方法的参数必须不同,或者是参数的个数不同,或者是参数类型不同。返回类型不能用来区分重载的方法。其实方法重载的最主要的作用就是实现同名的构造方法可以接受不同的参数。,参数类型的区分度一定要足够,例如不能是同一简单类型的参数,如,int,与,long,。,2026/2/4 周三,17,Java EE,基础教程,例,4-3,创建一个类,该类包含两个重载的方法,对该类进行测试。,程序清单:,ch04MethodOverloadingTest.java,import,java.io,.*;,class,MethodOverloading,void,receive(int,i),System.out.println(Receive,one,int,data);,System.out.println(i=+i);,2026/2/4 周三,18,Java EE,基础教程,void,receive(int,x,int,y),System.out.println(Receive,two,int,datas,);,System.out.println(x=+x+y=+y);,public class,MethodOverloadingTest,public static void,main(String,args,),MethodOverloading,mo=new,MethodOverloading,();,mo.receive(1);,mo.receive(2,3);,2026/2/4 周三,19,Java EE,基础教程,例,4-4,编译并运行下面的程序,分析运行结果,体会其中方法重载的用法,进一步理解方法重载的概念。,程序清单:,ch04OverLoadingDemo.java,class Father,void speak()/,无参数的,speak(),方法,System.out.println(I,am Father!);,void,speak(String,s)/,有参数的,speak(String,s),方法,System.out.println(I,like+s+.);,2026/2/4 周三,20,Java EE,基础教程,public class,OverLoadingDemo,public static void main(String,args,),Father x=new Father();,x.speak,();/,调用无参的,speak(),方法,x.speak(music,);/,调用有参的,speak(music,),方法,2026/2/4 周三,21,Java EE,基础教程,4.1.3,构造方法,Java,中有一种特殊的方法叫构造方法,(Constructor),,它是产生对象时需要调用的方法。,Java,中的每个类都有构造方法,用来初始化该类的一个对象。构造方法具有和类名相同的名称,而且不返回任何数据类型。重载经常用于构造方法。构造方法只能由,new,运算符调用。,2026/2/4 周三,22,Java EE,基础教程,构造方法的形式如下:,public,类名,(,参数列表,),语句体,说明:,构造方法名必须为该类名;,可以通过参数表和方法体来给生成的对象的成员变量赋初值;,构造方法没有任何返回值。,每个类至少有一个构造函数。类被定义时如果没有显式地定义一个构造方法,那么编译器会自动创建一个默认构造方法,缺省构造函数没有参数,而且函数体为空。缺省构造方法的形式如下:,public,类名,(),这使得能够通过使用“,new,类名,();”,语句产生类的对象。,2026/2/4 周三,23,Java EE,基础教程,一旦在类中自定义了构造方法,编译器就不会提供默认的构造方法了。此时,语句“,new,类名,();”,将会引起编译错误。,可以通过为几个构造函数提供不同的参数表的办法来重载构造函数。,如果有一个类带有几个构造函数,那么也许会想复制其中一个构造函数的某方面效果到另一个构造函数中。可以通过使用关键字,this,作为一个方法调用来达到这个目的。,2026/2/4 周三,24,Java EE,基础教程,例如:,public class Employee,private String name;,private,int,salary;,public,Employee(String,n,int,s),name=n;,salary=s;,public,Employee(String,n),this(n,0);,public Employee(),this(Unknown );,在第二个构造函数中,有一个字符串参数,调用,this(n,0),将控制权传递到构造函数的第一个版本,即采用了一个,String,参数和一个,int,参数的构造函数中。,在第三个构造函数中,它没有参数,调用,this(“Unknownn,”),将控制权传递到构造函数的第二个版本,即采用了一个,String,参数的构造函数中,再由第二个版本传递带第一个版本中。,2026/2/4 周三,25,Java EE,基础教程,在任何构造函数中如果出现对于,this,的调用,则必须是第一个语句。,例,4-5,设计一个矩形类,Rectangle,,该类重载了多个构造方法。,程序清单:,ch04Crctngle.java,import,java.io,.*;,class Rectangle /,矩形类,private,int,width;/,矩形的宽度,private,int,length;/,矩形的长度,Rectangle()/,不带参数的构造函数,缺省的给出长(,30,)和宽(,20,),length=30;width=20;,Rectangle(int,l,int,w)/,带参数的构造函数,length=,l;width,=w;,2026/2/4 周三,26,Java EE,基础教程,Rectangle(Rectangle,r)/,此构造方法以另一个,Rectangle,对象作为参数,width=,r.width,();/,通过对象调用函数并附值给相应变量,length=,r.length,();,int,width()/,返回宽度,return width;,int,length()/,返回长度,return length;,2026/2/4 周三,27,Java EE,基础教程,public class,CRctngle,public static void main(String,args,),Rectangle x1=new Rectangle();/,声明类的对象并实例化,Rectangle x2=new Rectangle(50,40);/,声明类的对象并初始化,Rectangle x3=new Rectangle(x1);,System.out.println(x1.length()=+x1.length();,System.out.println(x1.width()=+x1.width();,System.out.println(x2.length()=+x2.length();,System.out.println(x2.width()=+x2.width();,System.out.println(x3.length()=+x3.length();,System.out.println(x3.width()=+x3.width();,2026/2/4 周三,28,Java EE,基础教程,4.1.4,对象,有了类,就可以创建类的对象。对象是系统中用来描述客观事物的一个实体,它是构成系统的一个基本单位。一个对象由一组属性和对这组属性进行操作的一组服务组成。一个对象的生命周期包括三个阶段:生成、使用和消除。,2026/2/4 周三,29,Java EE,基础教程,1,对象的生成,对象的生成包括声明、实例化。,格式为:,className,objectName,=new,className(paramlist,);,声明:,className,objectName,声明并不为对象实体分配内存空间,而只是分配一个引用空间;对象的引用类似于指针,是,32,位的地址空间,它的值指向一个堆内存的数据空间,它存储着有关数据类型的信息以及堆内存中当前对象实体的地址,而对于对象实体所在堆中的实际的内存地址是不可操作的,这就保证了对象实体的安全性。,2026/2/4 周三,30,Java EE,基础教程,实例化:运算符,new,为对象分配内存空间,它调用对象的构造方法,返回对象的引用;一个类的不同对象分别占据不同的内存空间。如果类中没有显示给出构造方法,系统会调用默认的构造方法。,2026/2/4 周三,31,Java EE,基础教程,2,对象的使用,通过运算符“,.”,可以实现对对象属性的访问和方法的调用。属性和方法可以通过设定访问权限来限制其它对象对它的访问。,访问对象属性的格式:,objectName.variable,;,objectName,是一个已生成的对象。,例:,person.name,=“Jack”;,调用对象的方法的格式:,objectName.methodName(paramlist,);,例如:,x.speak(“music,”);,new Father().speak();,2026/2/4 周三,32,Java EE,基础教程,3,对象的清除,Java,有所谓“垃圾收集”机制,这种机制周期地自动扫描对象的动态内存区,检测某个实体是否已不再被任何对象所引用,如果发现这样的实体,就释放实体占有的内存。因此,,Java,编程人员不必象,C+,程序员那样,要时刻自己检查哪些对象应该释放内存。系统垃圾回收方法为:,System.gc,()。当系统内存用尽或调用,System.gc,(),要求垃圾回收时,垃圾回收线程与系统同步运行。,2026/2/4 周三,33,Java EE,基础教程,下面进一步分析对象的内存模型,加深对对象在内存在存在形式的了解。程序如下:,class Monkey,float,hight,weight,;,String head,ear,hand,foot,mouth;,void,speak(String,s),System.out.println(s,);,class,LittleMonkey,public static void,main(String,args,),Monkey,littlemonkey,;/,声明对象。,littlemonkey,=new Monkey();/,使用,new,和默认构造方法为对象分配内存。,2026/2/4 周三,34,Java EE,基础教程,2026/2/4 周三,35,Java EE,基础教程,当用类创建一个对象时,类中的成员变量被分配内存空间,这些内存空间称做该对象的实体,而对象变量中存放着引用,以确保实体由该对象变量操作使用。,声明对象变量,littlemonkey,后,,littlemonkey,的内存中还没有任何数据,这时的,littlemonkey,是一个空对象,空对象不能使用,因为它还没有得到任何“实体”。必须再进行为对象实体分配内存的步骤,即创建对象实体。,2026/2/4 周三,36,Java EE,基础教程,当系统见到,littlemonkey,=new Monkey();,时,就会做两件事:,首先,为,height,、,weight,、,head,、,ear,、,mouth,、,hand,、,foot,各 个 变 量 分配 内 存。即,Monkey,类的成员变量被分配内存空间。如果成员变量在声明时没有指定初值,那么,对于整型变量默认初值是,0,,对于浮点型,默认初值是,0.0,,对于,booean,型默认初值是,false,,对于引用型默认初值是,null,。,其次,,new,运算符在为变量,height,、,weight,、,head,、,ear,、,mouth,、,hand,、,foot,分配内存后,返回一个代表这实例对象的内存位置的首地址号码给,littlemonkey,,可认为这个引用就是,littlemonkey,在内存里的名字,而且这个名字引用是,Java,系统确保分配给,height,、,weight,、,head,、,ear,、,mouth,、,hand,、,foot,的内存单元将由,littlemonkey,操作管理。称,height,、,weight,、,head,、,ear,、,mouth,、,hand,、,foot,分配的内存单元是属于对象,littlemonkey,的。所谓为对象分配内存就是指为它分配变量,并获得一个引用,以确保这些变量由它来“操作管理”。,2026/2/4 周三,37,Java EE,基础教程,例,4,-6,以,Point,类为例说明对象与实体的关系。,程序清单:,ch04TestPoint.java,class Point,int,x,y,;,Point(),x=0;y=0;,Point(int,x,int,y),this.x,=x;,this.y,=y;,class,TestPoint,public static void,main(String,args,),Point p1=new Point(34,56);,Point p2=new Point(21,67),p1=p2;,2026/2/4 周三,38,Java EE,基础教程,程序中使用了赋值语句“,p1=p2;”,把引用变量,p2,在内存中的名字赋给了,p1,,因此,p1,和,p2,本质上是一样的了,即,p1,、,p2,有相同的实体。虽然在程序中,p1,,,p2,是两个名字,但在系统看来他们引用同一个对象,他们对应的是同一个地址。此时,p1,、,p2,如同一个人有两个名字一样。系统将取消原来分配给,p1,的内存。这时如果输出,p1.x,的结果将是,21,,而不是,34,。,2026/2/4 周三,39,Java EE,基础教程,一个类创建的两个对象,如果具有相同的引用,那么就具有完全相同的实体。,对象不仅可以操作自己的变量改变状态,而且还拥有了调用创建它的那个类中的方法的能力,对象通过使用这些方法可以产生一定的行为。,对象创建之后,就有了自己的变量,即对象的实体。通过使用运算符“,.”,,对象可以实现对自己的变量和方法的访问。,类中的方法可以操作成员变量。当对象调用方法时,方法中出现的成员变量就是指该对象的成员变量。,2026/2/4 周三,40,Java EE,基础教程,例,4-7,创建华氏,-,摄氏温度转换类(,TempConverter,),对华氏,-,摄氏温度进行转换并输出转换结果。,程序清单:,ch04TempConverter.java,public class,TempConverter,public static void,main(String,args,),TempConverter,t=new,TempConverter,();,t.data,();,protected void data(),for(,int,i=-40;i=50;i+=10),float c=(i-32)*(5f/9);,print(i,c);,protected void,print(float,f,float c),System.out.println,(,华氏温度,+f+=,摄氏温度,+c);,2026/2/4 周三,41,Java EE,基础教程,例,4-8,创建一个“园”类,再创建一个“圆锥”类,,将一个圆的对象的引用传递给圆锥对象的底圆。,程序清单:,ch04Taper.java,class,圆,double,半径,;,圆,(double r),半径,=r;,double,计算面积,(),return 3.14*,半径*半径,;,void,修改半径,(double,新半径,),半径,=,新半径,;,double,获取半径,(),return,半径,;,class,圆锥,圆 底圆,;,double,高,;,圆锥,(,圆,circle,double,h),this.,底圆,=circle;,this.,高,=h;,double,计算体积,(),double volume;,volume=,底圆,.,计算面积,()*,高,/3.0;,return volume;,void,修改底圆半径,(double r),底圆,.,修改半径,(r);,2026/2/4 周三,42,Java EE,基础教程,double,获取底圆半径,(),return,底圆,.,获取半径,();,public class Taper,public static void,main(String,args,),圆,circle=new,圆,(10);,圆锥,circular=new,圆锥,(circle,20);,System.out.println,(,圆锥底圆半径,:+circular.,获取底圆半径,();,System.out.println,(,圆锥的体积,:+circular.,计算体积,();,circular.,修改底圆半径,(100);,System.out.println,(,圆锥底圆半径,:+circular.,获取底圆半径,();,System.out.println,(,圆锥的体积,:+circular.,计算体积,();,2026/2/4 周三,43,Java EE,基础教程,例,4-9,设计一个计算阶乘的类,Fact,,对该类进行测试。,程序清单:,ch04CheckFact.java,class Fact,float fact(,int,n)/,定义计算,n!,的方法,int,i;,float x=1;,for(i,=1;i,n;i,+),x=x*n;,return x;,public class,CheckFact,public static void main(String,args,),Fact x=new Fact();,System.out.println(x.fact(10);/,计算,10,!,System.out.println(x.fact(15);/,计算,15,!,2026/2/4 周三,44,Java EE,基础教程,例,4-10,通过递归调用类中的方法,计算出,Fibinacii,序列的前十项,,Fibinacii,序列的前两项是,1,,后续每项的值都是该项的前两项之和。,程序清单:,ch04ItemsFibi.java,class,Fibi,public long,fibinacii(int,n),long c=0;,if(n,=1|n=2),c=1;,else,c=fibinacii(n-1)+fibinacii(n-2);/,递归调用,return c;,2026/2/4 周三,45,Java EE,基础教程,public class,ItemsFibi,public static void,main(String,args,),Fibi,a=new,Fibi,();,for(int,i=1;i=10;i+),System.out.print,(+,a.fibinacii(i,);,2026/2/4 周三,46,Java EE,基础教程,4.1.5,父类、子类和继承,Java,中,所有的类都是通过直接或间接地继承,java.lang.Object,得到的。,Object,类是所有类的父类,如果一个类没有使用,extends,关键字明确标识继承另外一个类,那么这个类就默认继承,Object,类。因此,,Object,类是,Java,类层中的最高层类,是所有类的超类。,Java,中任何一个类都是它的子类,由于所有的类都是由,Object,衍生出来的,所以,Object,的方法适用于所有类。,继承而得到的类为子类,被继承的类为父类,父类包括所有直接或间接被继承的类。子类继承父类的状态和行为,同时也可以修改父类的状态或重载父类的行为,并添加新的状态和行为,,Java,中不支持多重继承。,2026/2/4 周三,47,Java EE,基础教程,1,创建子类,通过在类的声明中加入,extends,子句来创建一个类的子类,其格式如下:,class,SubClass,extends,SuperClass,把,SubClass,声明为,SuperClass,的直接子类,如果,SuperClass,又是某个类的子类,则,SubClass,同时也是该类的,(,间接,),子类。子类可以有选择地继承父类的内容。如果缺省,extends,子句,则该类为,java.lang.Object,的子类。子类可以继承父类中访问权限设定为,public,、,protected,的成员变量和方法。但是不能继承访问权限为,private,的成员变量和方法。,2026/2/4 周三,48,Java EE,基础教程,2,继承,继承是一种由已有的类创建新类的机制,通过继承实现代码复用。利用继承,我们可以先创建一个共有属性的一般类,根据该一般类再创建具有特殊属性的新类,新类继承一般类的状态和行为,并根据需要增加它自己的新的状态和行为。,子类不能继承父类中访问权限为,private,的成员变量和方法。子类可以重写父类的方法,及命名与父类同名的成员变量。但,Java,不支持多重继承,即一个类从多个超类派生的能力。,2026/2/4 周三,49,Java EE,基础教程,子类继承父类的方法与属性,而自己本身又增加了新的属性和方法,所以子类的功能比父类要强大。,尽管一个子类从父类继承所有的方法和变量,但它不继承构造函数。,继承是在维护和可靠性方面的一个伟大进步,如果在父类中进行修改,那么,子类就会自动修改,而不需要程序员做任何工作,除了对它进行编译。,(,1,)子类和父类在同一包中的继承性,如果子类和父类在同一个包中,那么,子类自然地继承了其父类中不是,private,的成员变量作为自己的成员变量,并且也自然地继承了父类中不是,private,的方法作为自己的方法,。,2026/2/4 周三,50,Java EE,基础教程,例,4-11,子类和父类在同一包中的继承性。,程序清单:,ch04SubBoy.java,import,java.applet,.*;,import,java.awt,.*;,class Father1,private,int,money;,float,weight,height,;,String head;,String,speak(String,s),return s;,2026/2/4 周三,51,Java EE,基础教程,class Son extends Father1,String hand,foot;,public class,SubBoy,extends Applet,Son boy;,public void init(),boy=new Son();,boy.weight,=120f;,boy.height,=1.75f;,boy.head,=,一个聪明的大脑袋,;,boy.hand,=,两只巧手,;,boy.foot,=,一双喜欢瞎跑的脚。,;,2026/2/4 周三,52,Java EE,基础教程,public void,paint(Graphics,g),g.drawString(boy.speak,(,我是儿子,),5,20);,g.drawString(boy.head+boy.hand+boy.foot,5,40);,g.drawString,(,体重,:+,boy.weight,+,身高,:“,+boy.height,5,60);,2026/2/4 周三,53,Java EE,基础教程,(,2,)子类和父类不在同一包中的继承性,如果子类和父类不在同一个包中,那么,子类继承了父类的,protected,,,public,成员变量做为子类的成员变量,并且继承了父类的,protected,、,public,方法为子类的方法。如果子类和父类不在同一个包里,子类不能继承父类的友好变量和友好方法。,2026/2/4 周三,54,Java EE,基础教程,例,4-12,本例中,,Father,和,Jerry,分别隶属不同的包。,程序清单,1,:,ch04tomlangshanFather.java:,package ch04.tom.langshan;,public class Father,int,height;,protected,int,money;,public,int,weight;,public,Father(int,m),money=m;,protected,int,getMoney,(),return money;,void,setMoney(int,newMoney,),money=,newMoney,;,2026/2/4 周三,55,Java EE,基础教程,程序清单,2,:,ch04suncomJerry.java:,package;,import ch04.tom.langshan.Father;,public class Jerry extends Father /Jerry,和,Father,在不同的包中,.,public Jerry(),super(20);,public static void,main(String,args,),Jerry,jerry,=new Jerry();,/,jerry.height,=12;/,非法,因为,Jerry,没有继承友好的,height.,jerr
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 百科休闲 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服