




已阅读5页,还剩79页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
返回,第4章Java程序结构,Java语言是一种纯面向对象的程序设计语言,它的核心概念是类和对象,它的程序是基于类和对象建造的,程序中类的结构决定了程序的结构。这一章较深入系统地介绍Java程序的结构,介绍组成Java程序的类之间的关系。,Java程序结构,类层次结构对象的使用与对象间通信多态性接口与包访问控制与修饰符,类层次结构,继承的概念继承的描述类的继承规则变量的隐藏,继承的概念,在日常生活中,我们常用“是一种(is-a)”关系来组织与表达知识,从而将知识组织成一种有层次、可分类的结构。面向对象程序设计方法将is-a关系引入到程序设计领域,用于描述类与类之间的关系,称之为继承。,多态性,同一运算或方法(如“+”)对不同类型的对象(如整型数,或字符串)有不同的语义解释。这种在程序中同一方法对不同类型的对象有不同解释的现象称为多态性多态性与继承是密不可分的。通常,两类对象都有共同的父类,在父类中定义的方法在这两个子类中分别有不同的实现,超类与子类,我们在声明类A时,指明类A继承了类B(类B是一个已定义了的类),则类A通常就拥有了类B的成员变量和方法。此时,类B称为类A的直接超类(superclass),超类也称为父类或基类;类A称为类B的直接子类(subclass),子类也称为派生类,继承的描述,Java语言中,声明类首部的格式如下:类的修饰符class类名extends超类名implement接口名表其中“extends超类名”部分就是用来描述继承的,这里超类名指明所声明类的直接超类,继承描述的演示,classCar/声明Car类intcar_number;voidset_number(intcar_num)car_number=car_num;voidshow_number()System.out.println(我的车号是:+car_number);classTrashCarextendsCar/声明TrashCar类,它继承Car类intcapacipy;voidset_capacity(inttrash_car_capacipy)capacipy=trash_car_capacipy;voidshow_capacity()System.out.println(我的容量是:+capacipy+);,类的继承规则,直接子类继承那些被声明为public或protected的直接超类成员(包括成员变量和成员方法,下同)直接子类继承那些未被存取权限修饰符修饰的直接超类成员,只要该子类与该超类在同一个包中如果直接子类声明了一个与直接超类中的成员同名的成员,则该子类不继承该超类中的该同名成员直接子类不继承被修饰为private的直接超类的成员,变量的隐藏,直接子类声明了一个与其直接超类的成员变量同名的成员变量,则称该超类的该成员变量在该直接子类中被隐藏,关键字this和super分别用来指明直接子类和其直接超类中同名的成员变量当超类的成员变量、子类的成员变量和类中方法使用的局部变量三者同名,或其中的两者同名时,可以使用关键字this和super来指定所要使用的变量,this和super区别同名变量的演示,classAintx;/类A中声明了成员变量xclassBextendsA/类B继承类A,也继承了类A的成员变量xintx;/类B中又声明了成员变量xvoidm()intx;/方法m声明了自己的局部变量xsuper.x=2;/super.x是其所在类的父类即类A的xthis.x=1;/this.x是其所在类即类B的xx=100;/x是方法本身的局部变量x,对象的使用与对象间通信,对象的创建对象的使用对象间的通信(消息)与实例方法的调用,对象的创建,Java中,类是某一类对象的共同特征(属性、行为)的描述,即类中含有某一类对象具有哪些属性、哪些行为的信息。而由类创建的多个对象都具有类所定义的那些属性和行为。但是,由同一个类所创建的不同对象的同一个属性的值可能不同,对象的生命周期,对象和现实生活中的事物一样,有它的产生、发展和消亡的过程,在Java中分别称之为对象的创建、使用和释放,这一过程称为对象的生命周期,定义一个学生类,classStudent/Student是学生类名/定义成员变量privateintsNumber;/学号privateStringsName;/姓名privateStringsClass;/班号。以下是定义成员方法voidsetSNumber(intxNumber)/成员方法setSNumbersNumber=xNumber;intgetSNumber()/成员方法getSNumberreturnsNumber;voidsetSName(StringxName)/成员方法setSNamesName=xName;StringgetSName()/成员方法getSNamereturnsName;voidsetSClass(StringxClass)/成员方法setSClasssClass=xClass;StringgetSClass();/成员方法getSClassreturnsClass;,创建对象过程,对象的声明对象的实例化对象的初始化,对象的声明,对象声明的语法形式为:类名对象名;该语句从指定的类创建对象。,对象的实例化和初始化,必须给一个对象分配相应的存储空间,才能使用它。在声明一个对象时,并没有为该对象分配存储空间。对象的实例化完成对象的空间分配,对象实例化是通过new操作完成。构造方法的调用则确定了对象的初始状态,这一过程就是初始化,对象创建过程的演示,classCourse/Course是课程类名/定义成员变量privateintcNumber;/课程编号privateStringcName;/课程名privateintcUnit;/学分数/定义成员方法voidsetCNumber(intxNumber)/成员方法setCNumbercNumber=xNumber;intgetCNumber()/成员方法getCNumberreturncNumber;voidsetCName(StringxName)/成员方法setCNamecName=xName;,StringgetCName()/成员方法getCNamereturncName;voidsetCUnit(intxUnit)/成员方法setCUnitcUnit=xUnit;intgetCUnit()/成员方法getCUnitreturncUnit;publicclassInitialDemo1publicstaticvoidmain(Stringargs)Coursecs1=newCourse();/声明一个Course对象cs1System.out.println(cs1.getCNumber();/输出初始值cNumberSystem.out.println(cs1.getCName();/输出初始值cNameSystem.out.println(cs1.getCUnit();/输出初始值cUnit,演示对象的初始化,classCourse/Course是类名/定义成员变量intcNumber=1;/课程编号StringcName=”Wang”;/课程名intcUnit=2;/学分数publicclassInitialDemo2publicstaticvoidmain(Stringargs)Coursecs1=newCourse();/声明一个Course对象cs1System.out.println(cs1.cNumber);/输出初始值cNumberSystem.out.println(cs1.cName);/输出初始值cNameSystem.out.println(cs1.cUnit);/输出初始值cUnit,演示使用构造方法进行初始化,classCourse/Course是类名/定义成员变量intcNumber=1;StringcName;intcUnit=2;/构造方法Course(StringName,intUnit)cName=Name;cUnit=Unit;publicclassInitialDemo3publicstaticvoidmain(Stringargs)Coursecs1=newCourse(“Zhang”,6);/使用类中声明的构造方法/声明一个Course对象cs1System.out.println(cs1.cNumber);System.out.println(cs1.cName);System.out.println(cs1.cUnit);,演示由子类创建对象的过程,classAintx=1;inty=1;A(intx1,inty1)x=x1;y=y1;classBextendsAintx=2;floatz;B(intxx,intyy)super(0,0);/子类的构造方法中先调用超类的构造方法,否则Java调用默认的构造方法A()this.x=xx;this.y=yy;,publicclassEtndsDemopublicstaticvoidmain(Stringargs)Bb1=newB(1,2);System.out.println(b1.x);System.out.println(b1.y);System.out.println(b1.z);,对象的使用,引用对象的成员变量调用对象的成员方法对象作数组元素对象作类的成员变量,引用对象的成员变量,引用对象成员变量的语法形式为:对象名.成员变量名;,例:Rectangle类的声明,classRectangleintwidth;intheight;Rectangle()/Rectangle类的构造方法width=20;height=30;,静态变量和实例变量,调用对象的成员方法,如前所述,调用对象成员方法的语法形式为:对象名.成员方法名(实际参数表);其中:对象名指定所使用的对象;成员方法名指定所要调用的成员方法;实际参数表由0个或多个表达式构成,表达式之间用逗号“,”分隔,调用对象方法参数传递过程演示,classMethodDemo1/实现两个形式参数x、y的相加,其和以方法返回值的形式传回floatadd(floatx,floaty)floatz;z=x+y;returnz;publicclassCallMethodDemo1publicstaticvoidmain(Stringargs)floatresult;methodDemo1addCall=newmethodDemo1();result=addCall.add(3,5);/调用对象addCall的add方法,计算3+5System.out.println(result);/result的值为3+5,说明实例,本例中类MethodDemo1给出一个实现两float型数相加的方法。方法的参数x、y是参与加法的操作数,相加的结果存于局部变量z中,return语句指明z的值即是方法的返回值。类CallMethodDemo1的add对象调用了类MethodDemo1的方法add,实参为整型3和5,演示方法的一种用法,classFactfloatfact(intn)/定义计算n!的方法inti;floatx=1;for(i=1;in;i+)x=x*i;returnx;publicclassMethodCallDemo2publicstaticvoidmain(Stringargs)Factx=newFact();System.out.println(x.fact(10);/计算10!System.out.println(x.fact(15);/计算15!,演示静态方法的用法,classFactstaticfloatfact(intn)/将方法fact声名为静态方法inti;floatx=1;for(i=1;in;i+)x=x*i;returnx;publicclassMethodCallDemo5publicstaticvoidmain(Stringargs)System.out.println(Fact.fact(10);/直接用类名.方法名调用静态方法System.out.println(Fact.fact(15);,演示数组作为方法的参数Java中数组是作为对象来处理的,classmethodDemo5floatfindMax(floatarr)/形式参数arr是数组inti;floattemp;temp=arr0;for(i=1;itemp)temp=arri;returntemp;,publicclassMethodCallDemo6publicstaticvoidmain(Stringargs)floatmax;floatx=1,2,3,4,5;methodDemo5y=newmethodDemo5();max=y.findMax(x);/实参x是数组,数组调用的返回值为5.0System.out.println(max);,对象作数组元素,对象也可以作数组元素,当对象作数组元素时,其数组称为对象的数组。创建对象的数组时,首先对数组初始化,然后对数组的每个元素初始化,对象作数组元素用法的演示,classnodeprivateintdata;privatenodenext;voidsetData(intx)data=x;intgetData()returndata;nodegetNext()returnnext;voidsetNext(nodex)next=x;,publicclassObjAsArrayElementDemopublicstaticvoidmain(Stringargs)/创建3个结点nodex=newnode3;/创建元素为node型对象的数组并初始化数组inti;for(i=0;ix.length;i+)/初始化数组元素对象xi=newnode();/给结点的data赋值,并组成链表for(i=0;ix.length;i+)xi.setData(i);if(ix.length-1)xi.setNext(xi+1);/利用start依次输出链表各结点的值nodestart=newnode();start=x0;/指向链表的第1个结点System.out.println(start.getData();/输出x0.datawhile(start.getNext()!=null)start=start.getNext();/指向下一结点System.out.println(start.getData();/输出xi.data,对象作类的成员变量,classdateStringyy;/年Stringmm;/月Stringdd;/日date(Stringxyy,Stringxmm,Stringxdd)/date构造方法yy=xyy;mm=xmm;dd=xdd;classStudentprivateintidNumber,height;/学号、身高privatecharsex;/性别datebirthday;/出生日期birthday是对象/Student构造方法Student(intid,inth,chars,Stringxyy,Stringxmm,Stringxdd)idNumber=id;height=h;sex=s;/调用date构造方法birthday=newdate(xyy,xmm,xdd);,intgetHeight()returnheight;intgetSex()returnsex;voidshow()/输出学号,身高,性别,出生年份System.out.println();System.out.print(/t+idNumber);System.out.print(/t+height);System.out.print(/t+sex);System.out.println(/t+birthday.yy);publicclassUseStudentpublicstaticvoidmain(Stringargs)throwsjava.io.IOExceptionintsum=0;doubleave;Studenta=newStudent3;/创建对象的数组,数组元素初始化a0=newStudent(100001,169,女,1976,06,12);a1=newStudent(100002,155,女,1976,02,03);a2=newStudent(100003,175,男,1976,05,25);/求平均身高for(inti=0;i=ave),对象间的通信(消息)与实例方法的调用,消息是一个对象发送给另一对象的信息,用来驱动接受这一消息的对象的某个行为。消息由三部分组成:接受消息的对象、对象中描述某一行为的方法以及这一方法所需要的参数。这些问题包括对象作方法的参数、作方法的返回值、作数组元素以及作类的成员变量。,对象作方法的参数,当方法的参数时类类型时,方法的实参就是一个对象,这就是对象作方法的参数的情形。与基本数据类型的变量作方法参数的情形不同,在基本数据类型的变量作方法参数的情形下,进行方法调用时的语义动作,是将实参的值传递给相应的形参。,对象作方法参数的演示,classobjPara/定义对象作为参数的类floattemp;/用成员变量temp传递参数值classmethodDemo4voidadd(floatx,floaty,objParaz)/对象z作为方法add的参数z.temp=x+y;/方法体对对象z进行操作,可以改变z的值voidcallAdd2(floatm,floatn)objParak=newobjPara();add(m,n,k);/向方法add发消息,将参数m,n的值分别传递给x,y,并将k的/存储地址值传送给z,然后执行方法add的方法体,计算x+y,/计算结果通过k传回callAdd方法System.out.print(m+n+=+k.temp);/k.temp的值即为m+n,publicclassMethodCallDemo7publicstaticvoidmain(Stringargs)objParax=newobjPara();methodDemo4y=newmethodDemo4();System.out.println(x.temp);/x.temp值为0.0y.add(1,2,x);/调用对象y的add方法,计算结果存于对象x的temp变量中System.out.println(x.temp);/x.temp值为3.0y.callAdd2(1,2);/输出1+2的结果,对象作方法的返回值,classnodeprivateintdata;privatenodenext;/成员变量next是node类型,而node是正在声明的类类型voidsetData(intx)data=x;intgetData()returndata;nodegetNext()/此方法的返回值类型是类类型returnnext;voidsetNext(nodex)next=x;,publicclassObjAsRetValDemopublicstaticvoidmain(Stringargs)/创建3个结点nodex1=newnode();nodex2=newnode();nodex3=newnode();/给结点的data赋值x1.setData(1);x2.setData(2);x3.setData(3);/把3个结点组成链表x1.setNext(x2);x2.setNext(x3);/利用start依次输出链表各结点的值nodestart=newnode();start=x1;/指向结点x1System.out.println(start.getData();/输出x1.datastart=start.getNext();/指向下一结点x2System.out.println(start.getData();/输出x2.datastart=start.getNext();/指向下一结点x3System.out.println(start.getData();/输出x3.data,多态性,方法的重构与重载方法的动态调用抽象类,多态性,多态性,就是程序中同一操作在不同的环境中有不同语义解释的现象。和继承机制一样,多态性是面向对象方法的一大特色,它提供了使同一程序有很强的适应不同环境的能力的描述机制。,方法的重构与重载,在直接子类中定义的某个方法与其直接超类的某个方法有相同的名称和参数,则称该子类重构(Overriding)了该超类的该方法,重构也称为覆盖在同一个类中定义了多个同名的方法,它们或有不同的形参个数或有不同的形参类型,则称该方法被重载(Overloading),方法重构的演示,classFathervoidspeak()/超类定义的speak方法System.out.println(IamFather!);classSonextendsFathervoidspeak()/子类重构的speak方法System.out.println(IamSon!);,方法重构的演示,classFathervoidspeak()/超类定义的speak方法System.out.println(IamFather!);classDemoThisSuperextendsFathervoidspeak()/子类重构的speak方法System.out.println(IamSon!);voiddemThisSuper()super.speak();/调用超类Father的speak方法this.speak();/调用子类DemoThisSuper重构的speak方法,classMethodCallDemo4publicstaticvoidmain(Stringargs)Fatherx=newFather();DemoThisSupery=newDemoThisSuper();x.speak();/执行方法体System.out.println(IamFather!);y.speak();/执行方法体System.out.println(IamSon!);y.demThisSuper();/super.speak()执行方法体System.out.println(IamFather!);/this.speak()执行方法体System.out.println(IamSon!);,演示方法的重载,classDemoverloadintadd(intx,inty)returnx+y;doubleadd(doublex,doubley)returnx+y;classMethodCallDemo3publicstaticvoidmain(Stringargs)Demoverloadx=newDemoverload();intim=1,in=2;doublefm=1.0,fn=2.0;System.out.println(x.add(im,in);/调用时,匹配整型加方法intadd(intx,inty)System.out.println(x.add(fm,fn);/调用时,匹配单精度型加方法/doubleadd(doublex,doubley),方法重构的规定,子类重构父类方法时,子类方法的返回类型应当与被重构方法的相同子类不能重构父类的final和private方法子类不能用实例方法去重构父类的static方法。子类的static方法可重构父类的static方法,但不能重构父类的实例方法子类方法重构父类方法时,子类方法的访问权限修饰词不能严于父类方法的访问权限修饰词子类若要引用父类中的被重构方法,应使用“super方法名”的方式,方法的动态调用,classLocation/位置类intx,y;/位置的坐标Location(intlocX,intlocY)x=locX;y=locY;voidshow()System.out.print(+x+,+y+);classPointextendsLocation/点类booleanvisible;/可见性Point(intpointX,intpointY,booleantrueOrFalse)super(pointX,pointY);/调用超类的构造方法visible=trueOrFalse;voidmoveTo(intnewX,intnewY)/方法-移动到新位置x=newX;y=newY;classCircleextendsPoint/圆类intr;/r存放半径Circle(intcentX,intcentY,intradius,booleantureOrFalse)super(centX,centY,tureOrFalse);r=radius;,voidexpand(intdelta)r=r+delta;/方法-扩展voidcontract(intdelta)r=rdelta;/方法-收缩voidshow()System.out.print(t圆心位于);super.show();System.out.print(t半径为+r);if(visible)System.out.println(t此圆发亮);elseSystem.out.println(t此圆不发亮);classTestPointCirclepublicstaticvoidmain(Stringargs)Pointp=newPoint(200,200,false);System.out.print(t点p的位置是);p.show();/调用超类Location的show方法System.out.println();Circlec=newCircle(100,100,20,true);c.show();/调用Circle类的show方法c.moveTo(300,400);c.expand(40);c.show();,说明,子类对象的引用可以赋给超类对象的引用;方法形参为某类对象时,可用其子类对象作实参。当子类对象引用赋给父类对象引用后,父类对象引用引用的是子类实例,用这个父类引用来引用子类实例成员(变量与方法)时只能引用与父类成员同名的那些成员。若成员变量出现隐藏,引用的是父类变量,若成员方法出现重构,引用的是子类的方法。,方法动态调用的演示,classTwoDimensionvoidshow()classPointextendsTwoDimensionprivateintx,y;Point(intpx,intpy)x=px;y=py;voidshow()/重构了超类的show方法,输出点的位置System.out.println(点的位置是(+x+,+y+);classLineextendsTwoDimensionprivateintx1,y1,x2,y2;Line(intpx,intpy,intqx,intqy)x1=px;y1=py;x2=qx;y2=qy;voidshow()/重构了超类的方法,输出线段两端位置,方法体语句略,classCircleextendsTwoDimensionprivateintcX,cY,radius;Circle(intx,inty,intr)cX=x;cY=y;radius=r;voidshow()/重构了超类的方法,输出圆心坐标及半径,方法体语句略classUseTwoDimensionstaticvoidshowParameter(TwoDimensionplc)plc.show();publicstaticvoidmain(Stringargs)Pointp=newPoint(10,10);Linel=newLine(0,20,100,20);Circlec=newCircle(100,100,50);/p,l,c均是TwoDimension类的子类类型,充当showParameter方法的实参/将子类对象引用赋给超类对象引用showParameter(p);/执行p.show()showParameter(l);/执行l.show()showParameter(c);/执行c.show(),抽象类,使用修饰符abstract对类加以修饰,这个类就是抽象类(abstractclass),抽象类不能被实例化。通常,抽象类中含有抽象方法,抽象方法是指只给出方法声明但没有方法体的方法。子类在继承抽象类时,必须重构其父类的抽象方法,给出具体的定义。,演示抽象类及其用法,abstractclassFigure/声明抽象类Figuredoublex,y;voidset_size(doublesize1,doublesize2)x=size1;y=size2;/声明抽象方法get_area,它没有方法体abstractdoubleget_area();classTriangleextendsFigure/Triangle继承抽象类Figuredoubleget_area()/重构其超类的抽象方法get_area()return(x*y/2);/三角形面积=底*高/2classRectangleextendsFigure/Rectangle继承抽象类Figuredoubleget_area()/重构其超类的抽象方法get_area()return(x*y);/矩形面积=长*宽,接口与包,接口包,接口,接口(interface)是一个协定,它定义了一组行为的界面,但没有定义行为的具体实现过程。任何一个类都可以实现一个接口。所谓一个类实现一个接口,是指这个类给出这个接口的所有行为的具体实现过程。从语法上看,接口由接口首部和接口体组成。接口首部给出接口名,如果存在接口的继承关系,也要在接口首部中给出。接口体主要是一组方法首部的说明,接口体中也可以声明一些常量。,接口声明、实现和使用的演示,/声明接口FigureinterfaceFigure/接口首部,interface是关键字,Figure是接口名/接口体voidset_size(doublesize1,doublesize2);/方法首部给出行为的界面doubleget_area();/接口声明结束classTriangleimplementsFigure/Triangle实现接口Figure,implements是关键字doublex,y;/实现接口的方法,给出所实现接口的所有方法首部的方法体publicvoidset_size(doublesize1,doublesize2)x=size1;y=size2;publicdoubleget_area()return(x*y/2);/三角形面积=底*高/2,classRectangleimplementsFigure/Rectangle实现接口Figuredoublex,y;publicvoidset_size(doublesize1,doublesize2)x=size1;y=size2;publicdoubleget_area()return(x*y);/矩形面积=长*宽classoutput/output类使用接口Figurestaticvoidput(Figureq)/此方法的参数是接口类型System.out.println(q.get_area();publicclassTestInterfacepublicstaticvoidmain(Stringargs)Figureft=newTriangle();/创建接口对象,其方法的具体实现过程/由Triangle类给出Figurefr=newRectangle();/创建接口对象,其方法的具体实现过程/由Rectangle类给出Rectangler=newRectangle();r.set_size(2,2);ft.set_size(2,2);fr.set_size(2,2);output.put(ft);/实参是接口对象,输出三角形面积:2output.put(fr);/实参是接口对象,输出矩形面积:4output.put(r);/实参是实现接口的类的对象,输出矩形面积:4,接口与抽象类的主要区别,接口不能实现任何方法(即不能给出方法的具体实现过程),而抽象类却可以一个类可以实现多个接口,但只能有一个直接超类接口不是任何类的继承层次的组成部分,无关的几个类可以实现同一个接口,包,包的概念包的创建包中成员的使用,包的概念,包(package)是一组相关类和接口的集合,它提供了访问权限和命名的管理机制。Java中的包主要有三个作用:1)使得功能相关的类易于查找和使用-同一包中的类和接口通常是功能相关的;2)避免了命名的冲突-不同包中的不同类可以同名;3)提供一种访问权限的控制机制,包的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 冷库安装施工合同范本
- 单位瓷砖采购合同范本
- 家庭纪念品赠与合同(2篇)
- 2024年5月量子等离激元群体智能佣金协同协议
- 买卖商铺合同范本
- 刷墙厂家供货合同范本
- 2025至2030年中国手动工具箱市场分析及竞争策略研究报告
- 2025至2030年中国成长百分百市场分析及竞争策略研究报告001
- 2025至2030年中国微波无线光端机行业投资前景及策略咨询报告
- 2025至2030年中国微型制冷压缩机行业投资前景及策略咨询报告
- 2025年新高考历史预测模拟试卷浙江卷(含答案解析)
- 义乌市事业单位招聘考试真题2024
- 企业廉洁风险防控课件教学
- T-SDFA 047-2024 混合型饲料添加剂中卡那霉素的测定 液相色谱-串联质谱法
- 大数据与会计专业专业的实习报告
- JT-T-4-2019公路桥梁板式橡胶支座
- 火龙罐综合灸疗法
- 托利多电子秤校秤步骤
- 《DVT深静脉血栓》
- 《大豆栽培学》PPT课件.ppt
- 米粉加工厂生产工艺理论介绍
评论
0/150
提交评论