Java面向对象程序设计_第1页
Java面向对象程序设计_第2页
Java面向对象程序设计_第3页
Java面向对象程序设计_第4页
Java面向对象程序设计_第5页
已阅读5页,还剩82页未读 继续免费阅读

下载本文档

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

文档简介

3.1Java的类和对象

类类是Java语言的最基本概念,是组成Java程序的基本要素类是Java的执行单位,Java运行的就是Java类本身;类封装了该类对象的变量和方法。对象对象是类的实例化,对象的创建是通过对象构造方法来实现的;我们可以生成多个对象,通过消息传递来进行交互,最终完成复杂的任务;消息传递是指激活指定的某个对象的方法,以改变它的状态或使其产生一定的动作。

3.1.1类的定义类的一般格式是:class类名{

属性(域);

方法;}▼3.1.2创建对象与定义构造函数(一)1.创建对象 创建对象的一般格式为: 类名新建对象名=new构造函数() 例如:

PhoneCardmyCard=newPhoneCard();创建对象与声明基本数据类型的变量类似,赋值号右边的new是为新建对象开辟内存空间的算符。与变量相比,对象占用的内存空间要大得多,对象是以类为模板创建的具体实例。3.1.2创建对象与定义构造函数(二)以PhoneCard类为例,它定义了五个域和三个方法,它的对象myCard的内存空间保存的域和方法分别为

myCard.cardNumbermyCard.password,myCard.balancemyCard.connectNumber,myCard.connnected,myCard.performConnection(),myCard.getBalance()myCard.performDial()。要访问或调用一个对象的域或方法,首先访问该对象,然后用算符“.”连接该对象的域或方法。 例如:myCard.balance=50;

3.1.2创建对象与定义构造函数(三)2.构造函数构造函数是与类同名的方法,创建对象的语句用new算符开辟了新建对象的内存空间后,将调用构造函数初始化这个新建对象。构造函数是类的一种特殊方法,其特殊性如下:构造函数的方法名与类名相同。构造函数没有返回值。构造函数的作用是对类的对象初始化。在创建一个类的新对象的同时,系统会自动调用该类的构造函数。3.1.2创建对象与定义构造函数(四)例如:定义PhoneCard类的构造函数。PhoneCard(longcn,intpw,doubleb,Strings){ cardNumber=cn; password=pw; if(b>0) balance=b; else System.exit(1); connectNumeber=s; connected=false;}然后就可以用如下的语句初始化PhoneCard对象:PhoneCardmyCard=newPhoneCard(20010922,342323,50,“200”);

3.1.3类的修饰符(一)Java程序定义类时,可在class之前增加若干类的修饰符来限定所定义类的特性。类的修饰符分为

*访问控制符

*非访问控制符有些修饰符可用来修饰类中的域或方法,本节讨论类的非访问控制符。

3.1.3类的修饰符(二)1.抽象类凡是用abstract修饰符修饰的类被称为抽象类,抽象类就是没有具体对象的概念类。例如:“鸟”是一个抽象类,它可以派生出若干子类如“鸽子”、“燕子”、“麻雀”、“天鹅”等,“鸟”仅仅作为一个抽象的概念存在,它代表所有鸟的共同属性,任何一只具体的鸟都是由“鸟”经过特殊化形成的某个子类的对象。

3.1.3类的修饰符(三)鸟鹰

猛禽

鸣禽

文鸟

百灵

画眉

3.1.3类的修饰符(五)2.最终类

如果一个类被final修饰,说明该类不可以有子类了。我们可以把有继承关系的类看成一棵倒长的树,所有类的父类是树根,每个子类是一个分支,声明为final的类的叶结点,且不能再有子类了。被定义为final的类通常是一些有固定作用、用来完成某种标准功能的类,如Java系统定义好的用来实现网络功能的InetAddress、Socket等类都是final类。3.2域和方法域域是类和对象的静态属性,它可以是基本数据类型的变量,也可以是其它类(系统类或用户自定义类)的对象。方法方法是类的动态属性,标志了类所具有的功能和操作。Java的方法与其它语言中的函数或过程类似,是一段完成某种功能的程序段。3.2.1域(一)1.静态域用static修饰的域就是静态域。静态域最本质的特点是:它们是类的域,不属于任何一个类的具体对象,它不保存在某个对象的内存区域中,而是保存在类的内存区域的公共存储单元。换句话说,对该类的具体对象而言,静态域是一个公共的存储单元。任何一个类的对象访问它,得到的都是相同的值;任何一个类的对象修改它,都是对同一内存单元进行操作。

3.2.1域(二)下面的程序片段定义了两个静态域:classPhoneCard200{ staticStringconnetcNumber=“200”; //所有的200电话卡的接入号码都是“200” staticdoubleaddtoryFee; //所有的200电话卡的电话附加费相同

longcardNumber; intpassword; booleanconnected; doublebalance;

…}▼3.2.1域(三)2.静态初始化器

静态初始化器是由static引导的一对大括号括起来的语句组。它的作用与类的构造函数相似,都是用来完成初始化的工作,但两者也有根本性的不同:构造函数是对每个新创建的对象初始化,而静态初始化器是对类本身进行初始化。构造函数是在用new运算符产生新对象时由系统自动执行的,而静态初始化器则是在它所属的类加载入内存时由系统调用执行的。不同于构造函数,静态初始化器不是方法,没有方法名、参数列表。▼

3.2.1域(四)3.最终域程序中经常需要定义各种类型的常量,并为它们取一个类似于变量的标识符名字,这样就可以在程序中用这个名字来引用常量。final就是用来修饰常量的修饰符,一个类的域如果被声明为final,则它的取值在程序的整个执行过程中都不会改变。例如:

staticfinalStringconnectNumber=“200”;3.2.2方法(一)方法由方法头和方法体组成,其一般格式如下: 修饰符1修饰符2……

返回值类型方法名(形式参数列表)throws[异常列表] {

方法体各语句;

}其中形式参数列表的格式为: 形参类型1形参名1,形参类型2形参名2,……

例如:

publicstaticvoid

main(Stringargs[])

throwsException{for(inti=0;i<args.length;i++)Systme.out.println(args[i]);}3.2.2方法(二)1.抽象方法修饰符abstract修饰的抽象方法是一种仅有方法头,而没有具体的方法体和操作实现的方法。例如:在抽象类PhoneCard中定义一个抽象方法:abstractvoidperformDial();使用抽象方法可使所有PhoneCard类的子类对外呈现一个统一的接口,至于方法体的具体实现,则留到当前类的不同子类的类定义中完成。注意:所有的抽象方法,都必须存在于抽象类之中。若一个抽象类的子类不是抽象类,则它必须为父类中的所有抽象方法书写方法体。▼3.2.2方法(三)2.静态方法

用static修饰的方法是属于整个类的方法,它的特点如下所示:static方法是属于整个类的方法,它在内存中的代码将随着类的定义而分配和装载,不被任何对象专有;非static方法是属于某个对象的方法,在对象创建时在内存中拥有自己的专用代码段。static不能操作属于某个对象的成员变量,而只能处理属于整个类的成员变量,即:static方法只能处理static域。

3.2.2方法(四)例如:在PhoneCard200中需要修改附加费,可以定义一个setAdditory()的静态方法:

staticvoidsetAdditory(doublenewAdd) { if(newAdd>0) additoryFee=newAdd; }

3.2.2方法(五)3.最终方法

用final修饰的方法是功能和内部语句不能被更改的最终方法。在面向对象程序设计中,子类可把从父类那里继承来的某个方法改写,形成域父类方法同名,解决的问题类似,但具体实现和功能不全一致的新的类方法,这个过程称为重写(覆写overriding)。如果类方法被final修饰了,则该类的子类就不能在重新定义与此方法同名的自己的方法,只能使用从父类继承来的方法。这样,可以防止子类对父类的关键方法的错误的重定义,保证了程序的安全性和正确性。注意:所有被private修饰的方法,以及包含在final类中的方法,都被缺省认为是final的。3.2.2方法(六)4.本地方法native修饰符一般用来声明用其它语言书写的方法。由于native方法是以非Java字节码的二进制代码形式嵌入Java程序的,所以整个Java程序的跨平台性能将受到限制或破坏,因此使用这类方法时应特别谨慎。3.3访问控制符

访问控制符是一组限定类、域或方法是否可以被程序里的其它部分访问和调用的修饰符。类的访问符有两个:缺省和public。域和方法的访问控制符有四个: 缺省

public privateprotected 3.3.1缺省访问控制符Java的类是通过包来组织。假如一个类没有访问控制符,缺省的认为该类只能被同一个包中的类访问,这种访问特性又称包访问性。同理,类内的域和方法如果没有访问控制符,也说明它们具有包访问性,可以被同一个包中的其它类所访问和调用。3.3.2公共访问控制符public(一)1.类对于处于不同包中的类,缺省的它们是互相之间不可见的。但是,当一个类被声明为public时,它就具有了被其它包中类访问的可能性,只要这些包中的类在程序中使用import语句引入public类,就可访问它了。一个类作为整体可见,并不能代表类中的域和方法也一定可见,除非它们也被声明为public。Java程序中如果有多个类,又有public修饰符,则主类必须是public类,且只能有一个public类。

3.3.2公共访问控制符public(二)2.方法被定义为public的方法是这个类对外的接口部分,程序的其它部分通过调用public方法达到与当前类交换信息、甚至影响当前类的目的。如果一个类希望作为公共工具供其它的类和程序使用,则应该把类和方法定义为public。3.3.2公共访问控制符public(三)3.域用public修饰的域被称为公共域,如果一个公共域属于一个公共类,则它可被所有其它类所引用。public修饰符会造成安全性和数据封装性下降,所以一般应减少public域的使用。

3.3.3私有访问控制符(一)用private修饰的域或方法只能被该类自身所访问和修改,而不能被任何其它类(包括该类的子类)来获取和引用。private修饰符提供了最高的保护级别。例如:在200电话卡类PhoneCard200中,电话卡的密码password不能允许其它类或对象随意查看或修改,所以这个域可以声明为私有的:

privateintpassword;

3.3.3私有访问控制符(二)当其它类希望获取或修改私有成员时,需要借助于类的方法来实现。比如可以在类PhoneCard200中定义方法setPassword()来修改密码;从而把password完全包裹保护起来。定义方法getPassword()来获取密码;同时,为保证只有具备一定权限才能查看或修改密码,可在getPassword()方法和setPassword()方法中做必要的安全性检查,满足了一定条件才能获得或修改变量password的数值,从而保证了私有数据的私有性。

3.3.4保护访问控制符protected

用protected修饰的域和方法可以被三种类引用:该类自身;与它在同一个包中的其它类;在其它包中的该类的子类。使用protected修饰符的主要作用是允许包中的类和其它包中的子类来访问父类的特定属性。

修饰符使用需要注意的问题abstract不能与final并列修饰同一个类。abstract不能与private、static、final或native并列修饰同一个方法。abstract类中不能有private的成员(包括域和方法)。abstract方法必须在abstract类中。static方法中不能处理非static属性。

Java系统默认每个类缺省地都具有三个域:null、this与super,所以在任意类中都可以不加说明而直接使用它们。

3.3.5null与this1.nullnull表示“空”变量,用于指代某一对象,但是,这个对象不存在相应的实例。 例如:PointpNull=null;在方法需要用对象作为参数时,可以用null来代替。 例如:drawPoint(null);2.thisthis表示的是当前对象本身。例:classHsbColor{inthue,saturation,brightness;HsbColor(inthue,intsaturation,intbrightness){this.hue=hue; //色调

this.saturation=saturation; //饱和度

this.brightness=brightness; //明亮

}HsbColorgetHsbColor(){returnthis;}}

复数类ComplexNumber1)复数类ComplexNumber的属性

realPart:实部,imageinPart:虚部。2)复数类ComplexNumber的方法ComplexNumber():构造函数,将实部和虚部置零。ComplexNumber(doubler,doublei):构造函数,将实部和虚部分别置为r和i。getRealPart():获得复数对象的实部。getImageinPart();获得复数对象的虚部。setRealPart(doubler):设置复数对象的实部。setImageinPart(doublei);设置复数对象的虚部。complexAdd(ComplexNumberc);当前复数对象与形式参数复数对象相加,所得结果为复数对象,返回调用者。complexMinus((ComplexNumberc);当前复数对象与形式参数复数对象相减,所得结果为复数对象,返回调用者。3.4继承(一)当一个类拥有另一个类的数据和操作时,就称这两个类之间具有继承关系,被继承的类称为父类或超类,继承的类称为子类。一个父类可以同时拥有多个子类,该父类实际上是所有子类的公共域和公共方法的集合,而子类是父类的特殊化,可对公共域和方法在功能、内涵方面加以扩展和延伸。

3.4继承(二)面向对象的继承特性中,还有一个关于单继承和多继承的概念。单继承是指任何类都只有一个父类。多继承是指一个类可以有一个以上的父类,它静态数据和操作从所有这些父类中继承的。Java只支持类的单重继承,但又通过接口实现了多继承。3.4.1派生类(一)Java中的继承是通过extends关键字来实现的。

class子类名extends父类名如果子类和父类在同一个包中,它可以从父类那里继承所有非private的域和方法作为自己的成员。如果子类和父类不在同一个包中,它可以从父类那里继承protected、public的的域和方法作为自己的成员。3.4.1派生类(二)例子: 电话卡有很多类型:磁卡、IC卡、IP卡、200卡、300卡、校园201卡。不同种类的电话卡有各自的特点,例如磁卡和IC卡没有卡号和密码;使用200卡每次通话要多扣0.1元的附加费等。同时它们也拥有一些共同的特性,如每张卡都有剩余的金额,都有通话的功能,因此,可以定义一种抽象的电话卡类。

电话卡类IC卡磁卡无卡号类有卡号类IP卡校园201卡200卡▼3.4.1派生类(三)Number_PhoneCard类:doublebalance; //继承自父类PhoneCardlongcardNumber;intpassword;StringconnectNumber;booleanconnected;None_Number_PhoneCard类:

doublebalance;//继承自父类PhoneCardStringPhoneSetType; 3.4.2域的继承与隐藏(一)PhoneCard类:

doublebalance;1.域的继承MagCard类:doublebalance; //继承自父类No_Number_PhoneCardStringPhoneSetType; //继承自父类No_Number_PhoneCardStringusefulArea;3.4.2域的继承与隐藏(二)IC_Card类:

doublebalance;//继承自父类No_Number_PhoneCardStringPhoneSetType;//继承自父类No_Number_PhoneCard3.4.2域的继承与隐藏(三)3.4.2域的继承与隐藏(四)IP_Card类:

doublebalance;//继承自父类Number_PhoneCardlongcardNumber;//继承自父Number_PhoneCardintpassword;//继承自父类Number_PhoneCardStringconnectNumber;//继承自父类Number_PhoneCardbooleanconnected;//继承自父类Number_PhoneCardDateexpireDate;D200_Card类:

doublebalance; //继承自父类Number_PhoneCardlongcardNumber;//继承自父Number_PhoneCardintpassword;//继承自父类Number_PhoneCardString

connectNumber; //继承自父类Number_PhoneCardbooleanconnected;//继承自父类Number_PhoneCarddoubleadditoryFee;3.4.2域的继承与隐藏(五)3.4.2域的继承与隐藏(六)2.域的隐藏子类重新定义一个从父类那里继承来的域变量完全相同的变量,称为域的隐藏。自父类继承的方法操纵父类被隐藏的域。例如,把例3.4.1中对200电话卡子类的定义修改为:3.4.2域的继承与隐藏(七)classP200_CardextendsNumber_PhoneCard{doubleadditoryFee;doublebalance;//父类已定义过

booleanperformDial(){if(balance>(0.3+additory)){balance-=(0.3+additory);returntrue;}elsereturnfalse;}}3.4.2域的继承与隐藏(八)上面的类定义中,增加定义了与从父类继承来的balance变量完全相同的变量,这样,P200_Card类的域变为:

doublebalance; //继承自父类Number_PhoneCard doublebalance; //P200_Card类自己定义的域

longcardNumber; //继承自父类Number_PhoneCard intpassword; //继承自父类Number_PhoneCard StringconnectNumber;//继承自父类Number_PhoneCard booleanconnected;//继承自父类Number_PhoneCard doubleadditoryFee;3.4.3

super

子类对父类的同名成员变量和方法,分别实行隐藏和覆盖。但是,有时需要在子类中访问父类的变量,父类的方法,Java提供的super就可以实现这访问。它的使用有三种情况:访问被隐藏的父类成员变量;如:

super.VariableName调用父类中被覆盖的方法;如:

super.MethodName调用父类中的构造方法;如:

super([paramList])▼3.5多态性(polymorphism)

多态性是指方法的实现具有多种形态。多态性又分为:由方法重载实现的静态多态性(编译时多态)。由方法覆盖实现的动态多态性(运行时多态)。

3.5.1方法的重载(overload)类对自身已有的同名方法的重新定义,即同名方法可采用不同的形式参数列表,包括形式参数的个数、类型、顺序的不同。系统会自动根据给出的实际参数的数目、类型和顺序来确定调用那个方法。

write(char

c){…}write(int

i){…}write(float

f){…}write(String

str){…}write(‘a’);write(123);write(12.34);write(“helloworld!”);3.5.2方法的覆盖子类可以定义与父类同名的方法,实现对父类方法的覆盖(Overriding)。abstractclassPhoneCard{doublegetBalance(){returnbalance;}}classP200_CardextendsPhoneCard{doublegetBalance(){

if(connected) returnbalance; else return-1;}}方法的覆盖与域的隐藏的区别为:子类隐藏父类的域只是使之不可见,父类的同名域在子类对象中仍然占有自己独立的内存空间;而子类方法对父类同名方法的覆盖将清除父类方法占用的内存,从而使父类方法在子类对象中不存在。

3.5.3构造函数的继承与重载(一)1.构造函数的继承 子类可以继承父类的构造函数,构造函数的继承遵循以下的原则:子类无条件地继承父类的不含参数的构造函数。若子类没有定义自己的构造函数,它将继承父类无参数的构造函数作为自己的构造函数。若子类定义了自己的构造函数,它先执行继承自父类的无参数构造函数,再执行自己的构造函数。对父类含参数的构造函数,子类可以通过在定义自己的构造函数中使用super关键字来调用它,但这个调用语句必须是子类构造函数的第一个可执行语句。

3.5.3构造函数的继承与重载(二)2.构造函数的重载构造函数的重载是指同一个类中存在若干个具有不同参数列表的构造函数,创建该类对象的语句会自动根据给出的实际参数的数目、类型和顺序来确定调用那个构造函数来完成对新对象的初始化工作。一个类的若干个构造函数之间可以互相调用,当一个构造函数调用另一个时,可以使用this关键字,但该调用语句应是整个构造函数的第一个可执行语句。▼3.6上转型对象假设A类是B类的父类,当我们用子类创建一个对象,而这个对象的引用赋值给父类的对象。Aa;a=newB();或Aa;Bb=newB();a=b;称这个父类对象a是子类对象的上转型对象。例如:“老虎是捕食动物”,哺乳类是老虎类的父类。但反之不行。优点:“狮子是捕食动物”,“豹子是捕食动物”,。。。缺点:失掉老虎独有的属性。上转型对象的使用上转型对象不能操作子类新增的域和方法。上转型对象可以操作子类继承或重写的方法。如果子类重写了父类的某个方法,上转型对象调用该方法时,是调用的重写方法。▼Circlec=newCircle();Trianglet=newTriangle();Linel=newLine();twinkle(c);twinkle(t);twinkle(l);Shapedraw()erase()Linedraw()erase()Triangledraw()erase()Circledraw()erase()voidtwinkle(Shapes) {for(inti=0;i<100;i++){s.draw();sleep(100);s.erase();}}3.7接口(一)接口(interface)也称为界面,在其声明语法上有些类似于类。实际上,完全可以把接口理解为一种特殊的类,一种由常量和抽象方法组成的特殊类。在Java中,出于简化程序结构的考虑,不支持类间的多重继承而只支持单重继承。接口是用来实现类间多重继承功能的结构。3.7.1接口的声明(一)接口的定义格式为:interfaceDeclaration

{ interfaceBody

}

其中:interfaceDeclaration为接口声明部分,interfaceBody为接口体部分;

3.7.1接口的声明(二)1.接口声明部分

[public]interface接口名

[extends父接口1,父接口2,…] {

...

}

3.7.1接口的声明(三)

其中:public指明任意类均可以使用这个接口。在缺省情况下,只有与该接口定义在同一个包中的类才可以访问这个接口。extends子句与类声明中的extends子句基本相同,不同的是一个接口可以有多个父接口,用逗号隔开,而一个类只能有一个父类。子接口继承父接口中所有常量和方法。

3.7.1接口的声明(四)2.接口体的定义接口体中包括常量定义和方法定义,其格式如下所示:

typeconstantName=Value; returnTypemethodName([paramList]);在接口中定义的常量可以被用来实现该接口的多个类共享,与C语言中的const定义常量是相似的。在接口中定义的常量必须是pubilcstaticfinal,这是系统默认的规定,所以常量也可以没有任何修饰符。

3.7.1接口的声明(五)接口中只有方法声明,而无方法实现,所以,方法定义没有方法体,且用分号作为结束。接口中声明的方法必须是publicabstract。如果方法体是用其他语言书写的,则该接口方法可以用native修饰符修饰。另外,如果在子接口中定义了和父接口同名的常量或相同的方法,则父接口中的常量被隐藏,方法被覆盖。

3.7.1接口的声明(六)例:

interfaceCollection { intMAX_NUM=100; voidadd(ObjectobjAdd); voiddelete(ObjectobjDelet); Objectfind(ObjectobjFind); intcurrentCount(); }

接口定义中声明了一个常量和四个方法。这个接口可以由队列、堆栈、链表等来实现。

3.7.2接口的实现(一)

接口的声明仅仅给出了抽象方法,要具体地实现接口所规定的功能,则需某个类为接口中的抽象方法定义实在的方法体,这就称为接口的实现。在类的声明中,用implements子句表示一个类将要实现某个接口,在类体中可以引用接口中定义的常量,而且必须实现接口中定义的所有方法。一个类可以实现多个接口,在implements子句中用逗号分隔。

class类名

implements接口1,接口2,…

3.7.2接口的实现(二)

classarrCollectionimplementscollection{Objectarr[]=newObject[MAX_NUM];intcount=0;publicvoidadd(ObjectobjAdd){...}publicvoiddelete(ObjectobjDelet){...}publicObjectfind(ObjectobjFind){...}publicintcurrentCount(){...}}3.7.2接口的实现(三)

注意:在类中实现接口所定义的方法时,方法的声明必须与接口中所定义的完全一致。在类中实现接口所定义的方法时,必须显式地使用public修饰符,否则将被系统警告为缩小了接口中定义的方法的访问控制范围。抽象类可以不实现接口的抽象方法,而非抽象类必须实现接口中的所有方法。

3.7.3接口的回调可以把实现某一接口类创建的对象的引用赋给该接口声明的接口变量,那么接口变量就可以调用被类实现的接口中的方法。▼3.8包(package)

利用Java语言开发实际系统时,可以利用“包”来管理类。包是松散的类的集合,为了方便编程和管理,通常把需要在一起工作的类放在一个包里。为Java创建一个源码文件的时候,它通常叫做一个“编辑单元”,每个编辑单元必须有一个以java结尾的名字。在编辑单元的内部,可以有一个与文件同名的public主类(也可以是非public主类),但只能有一个public类。3.8.1创建包(一)缺省情况下,系统为每个.java源文件创建一个无名包,该文件中定义的所有类都隶属于该包,但由于该包无名字,所以不能被其它包引用。为了解决这个问题,就要创建有名包。用package关键字创建包,而且该语句是.java源文件的第一个语句。

package包名;例如:

packagecardClass; packagecardSystem.cardClass;3.8.1创建包(二)在当前目录下创建一个子目录,以便存放这个包中包含的所有类的.class文件。

cardClass\上面的第二个语句中的“.”代表了目录分割符。即包中的类放在当前目录下的CardSystem子目录下的CardClass子目录下。

cardSystem\cardClass\3.8.1创建包(三)另外,使用jar命令将目录打成一个.jar压缩文件。

jarcvfCardSystem.jar.3.8.2常用包根据功能的不同,Java类库被划分成若干不同的包,每个包中都有不少具有特定功能和关系的类和接口。

要提高编程效率和质量,必须熟练掌握尽可能多的Java类库。1.java.lang包该包是Java语言的核心类库,包含了运行Java程序必不可少的系统类,如基本数据类型、基本数学函数、字符串处理、线程、异常处理类等。每个Java程序运行时,系统都会自动引入java.lang包,所以这个包的加载是缺省的。2.java.io包该包是Java语言的标准输入/输出类库,包含了实现Ja

温馨提示

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

评论

0/150

提交评论