千锋面向对象编程下_第1页
千锋面向对象编程下_第2页
千锋面向对象编程下_第3页
千锋面向对象编程下_第4页
千锋面向对象编程下_第5页
已阅读5页,还剩91页未读 继续免费阅读

下载本文档

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

文档简介

1、千锋教学部类的继承子类对象实例化过程super关键字变量及变量的作用域访问控制权限方法覆盖(override)多态性抽象类接口内部类java体系大原则(继承方面)上联:长江后浪推前浪,下联:. 为描述和处理个人信息,定义类Person:public class Person public String name; public int age; public Date birthDate; public String getInfo() .Person+name : String +age : int+birthDate : Date+getInfo() : String 为描述和处理学生信息

2、,定义类Student:public class Student public String name; public int age; public Date birthDate; public String school; public String getInfo() .Student+name : String +age : int+birthDate : Date+school : String+getInfo() : String 通过继承,简化Student类的定义:public class Person public String name; public int age; p

3、ublic Date birthDate; public String getInfo() .public class Student extends Person public String school;Person+name : String +age : int+birthDate : Date+getInfo() : StringStudent+school : String面向对象最重要的特点之一,就是可以实现对类的复用.可以通过两种方法实现, 1. 一种方法是将一个类当作另一个类的属性(称为合成/聚合关系). 2. 另一种方法是一个类继承另一个类.实现继承的类称为子类也叫派生类,

4、而被继承的类称为父类,也叫超类或基类通过“继承”一个现有的类,可以使用已经定义的类中的方法和变量(权限允许的前提下)。类的方法和属性可以被继承,但是类的构造器不能被继承类继承语法规则: class extends * Java类只支持单继承,不允许多重继承一个子类只能有一个父类一个父类可以派生出多个子类Person+name : String +age : int+birthDate : Date+getInfo() : StringStudent+school : String+setSchool():void+getSchool():StringSoldierOfficerGraduate

5、+major : String+register() : voidObject类是所有Java类的根父类(最高父类)任何一个java的类(class)都直接或者间接继承自Object类如果在类的声明中未使用extends关键字指明其父类,则默认父类为Object类 public class Person .等价于:public class Person extends Object .按照前一页的类结构及继承关系,定义实现Java类Person、Student、Graduate。所有的属性及方法均定义为public的。编写Java程序Test.java、创建Graduate类型对象并测试,访问

6、所有继承来的方法和属性。将父类Person、Student中的部分属性/方法改为private的,然后重复2中的测试。应用场景:当想要调用父类中的同名属性/方法/构造方法时,用super关键字来区分.在Java类中使用super来引用父类的成分super.可用于访问父类中定义的属性Demosuper.可用于调用父类中定义的成员方法Demosuper(.)可用于在子类构造器中调用父类的构造器Demo示例子类定义父类中的同名属性,同名且同参的(即重写)方法,在Test类中测试用子类对象调用.使用super关键字注意事项:super只能应用在成员方法和构造方法中,不能应用在静态方法中(和this是一

7、样的),如果在构造方法中使用super(.)必须放在第一行。思考:在构造方法中,super(.)和this(.)能同时出现吗?如果父类中显式定义了一个有参的构造方法,子类中的构造方法中可以不写super()也不写this()吗?NO.比较点thissuper1访问属性首先在子类中查找,如果没有就在 父类中查找直接查找父类中的属性2访问方法先在子类中找,如果没有就去父类中查找直接访问父类中方法3调用构造器调用本类中的其他构造方法调用父类的构造方法,完成一些对象初始化的工作4指代指当前对象没有概念5作为参数可以作为参数来传递没有此用法this和super都不能在static方法中调用Demothi

8、s()调用重载的构造方法super()调用父类的构造方法Person:name,ageStudent:school子类在构造的过程中必须(显式或隐式地)调用其基类的构造方法,直到Object子类可以在自己的构造方法中使用super调用基类的构造方法如果子类的构造方法中没有显式的调用基类的构造方法,则系统默认调用基类无参数的构造方法super()如果子类构造方法中既没有显示调用基类的构造方法,而基类中又没有无参的构造方法,则编译出错继承中的构造方法的例子:继承中的构造方法的例子:举例: 构造方法调用顺序static,笔试常考:在创建子类对象时,按顺序执行:父类static,子类static,父类

9、, 父类构造方法,子类,子类构造方法在Java中,可以在类、属性以及方法前面加上一个权限修饰符,来进行一些访问上的控制。修饰符同一个类中同一个包中子类中(不同包)全局privateYesdefaultYesYesprotectedYesYesYespublicYesYesYesYes注意: default,public也可以用来修饰一个类,但是protected不能修饰一个类.类的封装和隐藏MyBean mb = new MyBean();/mb.age = 10000;/编译正常,是一个合法但不合理的值int age = mb.getAge();System.out.println(age)

10、;/18age = 19;System.out.println(mb.getAge();/18,再次获取时,是将mb对象中的age属性又复印了一份返回回来mb.setAge(10000);System.out.println(mb.getAge();/18mb.setAge(10);System.out.println(mb.getAge();/10类的封装和隐藏private int age = 18;public int getAge()return age;public void setAge(int age)if(age 120 | age 0)System.out.println(输

11、入的年龄非法,请输入0-120之间的数值);return;this.age = age;(普通)类的访问修饰符public:任何包中的类都可以访问该类默认值:同一个包中的类可以访问该类成员的访问修饰符private:只对本身类可见默认值:对同一包中的类可见protected:对所有子类和同一包中的类可见public:对一切类可见局部变量,方法形参不能用权限修饰符注意:访问成员的前提是首先能访问成员所属的类访问控制的限制程度从高到低如下图所示。注意,Default不是一个修饰符,它只是用来表示一种不加任何修饰符时的状态。privateprotectedDefaultpublicf1_privat

12、ef2_defaultc4_publicf3_protectedf4_publicc1_private内存空间中子类对象携带的数据在子类中可以直接调用的方法或直接访问的属性fm2()_defaultfm3()_ protectedfm4()_ publiccm2()_publiccm1()_private父类Parent和子类Child在同一包中定义时:c2_defaultc3_protectedcm2()_defaultcm3()_protectedParent(定义各种权限的属性,方法,访问全部属性的方法)/Child(尝试在方法中访问父类属性)/Test(main方法分别调用父子类中的方

13、法,尝试直接访问Parent类中的属性,方法)在不同包中定义Test类,尝试访问Parent类中的protected的属性和方法Parent和Child不在同一个包中,在Child中定义访问父类中继承的所有属性的方法,创建父类/子类的对象分别调用打印属性的方法,观察子类新增的方法不能访问哪些属性. class Single private static Single onlyone = new Single(); private String name;public static Single getSingle() return onlyone; private Single() publi

14、c class TestSinglepublic static void main(String args) Single s1 = Single.getSingle(); Single s2 = Single.getSingle(); if (s1=s2) System.out.println(s1 is equals to s2!); Singleton单例设计模式在子类中可以根据需要对从父类中继承来的方法进行改造-方法的重写/override重写方法必须和被重写方法具有相同的方法名称(大小写敏感)、形式参数列表和返回值类型重写方法不能使用比被重写方法更严格的访问权限父类的静态方法不能被子

15、类覆盖为非静态方法,反之亦然 public class Person protected String name;protected int age;protected Date birthDate; /需要引入java.util.Datepublic String getInfo() return Name: + name + n +age: + age; public class Student extends Person protected String school;public String getInfo() return Name: + name + nage: + age +

16、 nschool: + school; public class Parent public void method1() public class Child extends Parent /public void method1() private void method1(int i) /public class UseBoth public void doOtherThing() Parent p1 = new Parent();Child p2 = new Child();p1.method1();p2.method1();编写应用程序测试类Parent和Child中定义的重写方法1

17、)创建两个类的对象并分别调用方法getInfo();2)在子类中添加同名属性protected String name;重复1)的测试,分析其结果。练习序号比较点重载重写1单词Overloadoverride2方法的声明方法名相同,参数列表不同方法名相同,参数列表一定相同3返回值没有要求返回值类型必须相同4访问权限没有要求子类不能比父类更加严格5范围同一个类继承关系中6功能1.代码重用 2. 记忆和使用 3.实现相近或相似的功能增强父类定义的方法的功能,对父类方法的升级重载与重写的区别(必考):关于多态静态多态也叫编译时多态,通过方法重载实现动态多态也叫运行时多态,通过对象的多态性实现 面向对

18、象的三大特性:继承封装多态多态-在Java中,子类的对象可以替代父类的对象使用一个引用类型变量可能指向(引用)多种不同类型的对象Person p = new Student();Object o = new Person();o = new Student(); 一个引用类型变量如果声明为父类的类型,但实际引用的是子类对象,那么该变量就不能再访问子类中新增加的属性和方法Student m = new Student();m.school = pku; /合法Person e = new Student(); e.school = pku;/非法 正常的方法调用 Person e = new P

19、erson(); e.getInfo(); Student e2 = new Student(); e2.getInfo(); 虚方法调用(多态情况下) Person e = new Student(); e.getInfo(); /调用了在Student类中重写的getInfo方法Client01,Car,Benz,Nissan,Honda,BuickClient02,Pet,Cat,DogClient03,CPU,Intel因特尔,AMD, LongXin龙芯练习方法声明的参数类型为父类类型,可以使用子类的对象作为实参调用该方法public class Test public void m

20、ethod(Person e) / e.getInfo();public static void main(String args) Test t = new Test(); Student m = new Student(); t.method(m);java大原则之三-最佳匹配性原则println(String);println(Object);byte add(byte,byte);/int add(int,int);double add(double,double);x.add(4,5);/调用add(double,double);x.add(byte)4,(byte)5);/调用ad

21、d(byte,byte);public class Person extends Object public class Student extends Person public class Teacher extends Person -public void method1(Person e) if (e instanceof Student) / 处理Student类型及其子类类型对象 else if (e instanceof Teacher) /处理Teacher类型及其子类类型对象 else /处理Person类型对象对Java对象的类型转换称为造型在造型前通常使用instanc

22、eof操作符测试一个对象的类型从子类到父类的类型转换可以自动进行从父类到子类的类型转换必须通过造型(强制类型转换)实现子类的对象可以当做基类的对象来使用称作向上转型,反之称为向下转型无继承关系的引用类型间的转换是非法的/Person及Student类可自行定义public class Test public void method(Person e) System.out.println(e.getSchool(); / if(e instanceof Student) Student me = (Student)e; System.out.println(me.getSchool(); pu

23、blic static void main(String args) Test t = new Test(); Person m = new Student(); t.method(m); public class Testpublic Car produce(int i)if(i = 1)return new Nissan();else if(i = 2)return new Benz();elsereturn new Car();public static void main(Stringargs)Test t = new Test();Car c = duce(1);c.dri

24、ve();Object类中定义有public String toString()方法,其返回值是String类型,描述当前对象的有关信息。/默认情况是打印的是 类名hashcode的十六进制表示在进行String与其他类型数据的连接操作时(如:System.out.println(“info”+person)),将自动调用该对象类的toString()方法。可以根据需要在用户自定义类型中重写toString()方法。Object类的方法public int hashCode() 方法返回该对象的哈希码值。public Class getClass()方法返回此 Object 的运行时类。toS

25、tring方法的列子:封装类针对八种基本类型定义相应的引用类型封装类基本数据类型封装类 boolean Boolean byte Byte short Short int Integer long Long char Character float Float double Double整数类的数值类型(Byte,Short,Character,Integer)对象的hashCode()为其本身的值;封装类中都重写了toString()方法.封装类用法举例int i = 500;Integer t = new Integer(i);int j = Value();/ j = 500S

26、tring s = t.toString(); / s = 500String s1 = Integer.toString(314); / s1= 314=操作符相同的字符串常量相等两个Integer,如果其中至少一个是new出来的,则不等; 如果都是同一个常量赋值的, 则相等.基本数据类型和封装类会拆箱比较数值两个不同封装类的对象不能比较, 编译报错.两个不同的基本数据类型,如果可以自动转换,则可以比较.有继承关系的引用数据类型对象之间可以比较,当指向同一个对象时相等.没有继承关系的引用数据类型不能比较.OperatorEE.javaequals方法在Object类中定义的equals方法:

27、public boolean equals(Object obj)注意:形参是Object类型!equals()方法的调用者必须是引用数据类型调用equals()方法时的实参可以是基本数据类型,java会自动进行装箱.=操作符与equals方法在比较引用数据类型时, =操作符与equals()作用完全一样-看引用的是不是同一对象除非在自定义的类中重写了equals方法,或是下面的四类已经重写了equals方法的特例:java.io.File;java.lang.String; java.util.Date封装类这四类当用equals()方法进行比较时,只比较类型及内容而不看引用的是不是同一对象

28、.=操作符与equals方法举例class TestEquals /请自行定义能满足需要的MyDate类 public static void main(String args) MyDate m1 = new MyDate(24, 3, 2001); MyDate m2 = new MyDate(24, 3, 2001); if ( m1 = m2 ) System.out.println(m1=m2); else System.out.println(m1!=m2); if ( m1.equals(m2) ) System.out.println(m1 is equal to m2); e

29、lse System.out.println(m1 is not equal to m2); m2 = m1; if ( m1 = m2 ) System.out.println(m1=m2); else System.out.println(m1!=m2); 关键字final在Java中声明类、属性和方法时,可使用final修饰符来修饰。final标记的类不能被继承。final标记的方法不能被子类重写。final标记的变量(成员变量或局部变量)即成为常量,只能赋值一次,且在使用前必须被赋值。final标记的方法的形参不能被重新赋值.final标记的成员变量必须在声明的同时或在每个构造方法(或

30、构造语句块)中显式赋值,然后才能使用。构造方法不能用final来修饰,因为构造方法不能被继承,更无所谓重写,用final修饰没有意义,编译会报错.关键字final应用举例public final class Testpublic static int totalNumber= 5 ;public final int id;public Test()id = +totalNumber; public static void main(String args) Test t = new Test();System.out.println(t.id);final int i = 10;final i

31、nt j;j = 20;j = 30; /非法 练习: 对比 static/final关键字参考前面章节,复习static修饰符的用法;练习前页例子及下述程序,并改正其错误,体会final关键字修饰变量时的用法;public class TestFinalpublic static void main(String args) int i = 1; final int j = 10; j = 100; final int k ; k = 100; k = 200; System.out.println(i= + i + j= + j + k= + k); 应用场景: 在定义一个类时,有些方法暂

32、时还不知道该怎么实现,只能等子类把这些方法都实现后才能使用.这样的方法应该定义为抽象abstract方法.含有抽象方法的类必须定义为抽象abstract类.用abstract来修饰类或方法 abstract class 类名 abstract 返回值类型 方法名(形参列表);抽象类不能被实例化,抽象方法必须被全部重写后,才能生成它的子类对象。如果一个子类没有实现抽象基类中所有的抽象方法,则子类也要声明为一个抽象类。抽象类不一定包含抽象方法-不想让人直接实例化可以声明抽象类类型的引用,把它作为方法形参,返回值类型等在类中没有实现的方法就是抽象方法,抽象方法没有方法体(不同于方法体为空)。思考:构

33、造方法,静态方法,public方法,protected方法,default方法,private方法,final方法能不能被声明为抽象的方法。思考:属性能否用abstract来修饰?思考:抽象类中可以有普通方法吗?抽象类中可以有构造方法吗?抽象类中可以有static方法吗?抽象类中可以有static属性吗?抽象类中可以有实例属性吗?修饰符修饰对象规则static属性类或类的实例来调用,最好用类引用方法只能调用静态变量或静态方法,不能使用this,super代码块程序一加载静态代码块就运行,而且只运行一次final属性常量,final int i=12;或者final int i;i=12;方法该

34、方法不能被子类重写类该类不能被继承。abstract方法该方法只有方法声明,没有方法体构造方法和static方法不能是抽象的有该方法的类称为抽象类,类名前必须加abstract类抽象类不能被实例化抽象类可以具有指向子类对象的引用抽象类可以有普通方法,只能子类调用父类的抽象方法必须在子类中实现(用子类实例对象)接口(interface)是抽象方法和常量值组成的一个数据结构。从本质上讲,接口是一种特殊的抽象类,这种抽象类中只包含常量和方法的定义,而没有方法的实现jdk8之前jdk8之后,接口中可以定义default方法(一种实例方法),static方法接口定义举例public interface

35、Runner int id = 1;void start();public void run();abstract void stop();接 口(1)接 口(2) 多个类可以实现同一个接口 一个类可以实现多个接口 与继承关系类似,接口与实现类之间存在多态性 定义java类的完整语法格式: class extends implements ,* *接口应用举例(1)public interface Runner public void start();public void run();public void stop();接口应用举例(1)public class Person implem

36、ents Runner public void start() /弯腰、蹬腿、咬牙、瞪眼、 开跑public void run() / 摆动手臂、 维持直线方向public void stop() / 减速直至停止、瘫倒、吐血、送医院接口应用举例(2)Runner+start()+run()+stop()Person+start()+run()+stop()+dance()Car+start()+run()+stop()+fillFuel()+crack()Bird+start()+run()+stop()+fly()接口应用举例 (3)interface Runner public void

37、 run();interface Swimmer public double swim();abstract class Animal public abstract int eat(); /class Person extends Animal implements Runner,Swimmer public void run() public double swim() public int eat() public class Testpublic static void main(String args)Test t = new Test();Person p = new Person

38、();t.m1(p);t.m2(p);t.m3(p);public void m1(Runner f) f.run(); public void m2(Swimmer s) s.swim();public void m3(Animal a) a.eat();Ex2实现前页各类中的方法细节,并根据自己的疑问改编和扩充有关类和接口的定义,体会接口的功能和用法例如可扩充为:public void m1() System.out.println(in method m1 );接口特性接口可以多重实现;接口中声明的属性默认为public static final的;也必须是public static f

39、inal的;可以写public的或者不写,不能写private的或者protected的;接口中只能定义抽象方法,而且这些方法默认为public abstract的、也必须是public abstract的,可以缺省,但不能用其它修饰符;接口可以继承若干个其它的接口,并添加新的属性和抽象方法接口里可以没有任何属性,方法.用实现接口的方式,你可以用接口中的方法指定一个类(其实现类) “必须做什么”,而不是规定它“如何去做”.思考: 何时用接口,何时用抽象类?子类继承抽象类就不能再继承其他类(java的单继承原则),所以有抽象方法时优先使用接口定义.如果所有方法都没有实现,优先使用接口.一些方法已

40、经可以实现,而另一些方法无法或不想实现时,且继承(实现)关系很简单时,考虑用抽象类定义,留给后代去实现。jdk8之后,也可以在接口中定义default方法或static方法来实现.NO.比较点抽象类接口1定义用abstract修饰的类。静态常量和抽象方法的集合2组成抽象方法,普通方法,构造方法,成员变量,常量抽象方法,静态常量3使用子类继承(extends)实现类实现(implements)4关系抽象类可以实现接口接口不能继承抽象类5对象都是通过对象的多态性来实现的6局限不能多继承,不能实例化一个接口可以有多个实现类,一个类可以实现多个接口,一个接口可以继承多个接口,接口不能实例化7选择建议选

41、择接口,避免单继承。8实际应用模板,有些方法无法在定义时实现或故意留给子类实现制定规范,标准综合练习接口Teaching(包含方法: 备课prepareLessons,上课teach,批改作业homeworkCorrecting,.)接口Sports (包含方法: 跑步running, 打球playBall,.)接口Drinking(包含方法: drink, throwup,playMad,.)抽象类Person(包含抽象方法:getMoney,.)子类(实现类)Student,Teacher.使用三种多态,虚方法调用,对象类型判断,对象造型,重写equals方法,重写toString方法一个

42、类可以定义在类的内部,这样的类称为内部类,而包含它的类称为外部类(宿主类Host)应用场景: 处理宿主类的内部事务,一般跟其他类关系不大,能够减少java的源代码数量.安卓阶段将大量使用匿名内部类.普通内部类的定义格式modifiers class /外部类的成员modifiers class /内部类的成员public class InnerClassTest private class Innprivate void innerMethod()System.out.println(innerMethod);void outerMethod()Inn inn = new Inn();inn.

43、innerMethod();/host可以调用内部类的私有成员public static void main(String args) InnerClassTest ict = new InnerClassTest();Inn inn1 = ict.new Inn();/用宿主类的对象调用内部类的构造方法inn1.innerMethod();Inn inn2 = new Inn();/是否正确?inn2.innerMethod();内部类内部类与外部类之间存在逻辑上的所属关系内部类可以(直接或间接)访问外部类所有属性当内部类声明成public或private等时,在宿主类之外对其访问的限制与对

44、成员变量和成员方法完全相同Inner class 一般用在定义它的类或语句块之内,在外部引用它时必须给出完整的名称。Inner class 的名字不能与宿主类的类名相同成员内部类也叫实例内部类,即没有用static修饰的内部类在文件管理方面,成员内部类在编译完成后也会产生.class文件,而文件名称则是”外部类名称$内部类名称.class”非静态Inner class 可以使用宿主类的静态和实例成员变量实例化成员内部类在宿主类之外例如Client.java中实例化成员内部类的格式:Outer outer = new Outer();/创建宿主类的对象Outer.Inner inner = ou

45、ter.new Inner();/尝试设定Inner不同的权限,看能否成功编译在宿主类内部实例化成员内部类的格式:在静态方法中(比如在main方法中): Outer outer = new Outer();/创建宿主类的对象/*Outer.*/Inner inner = outer.new Inner();/都可以在非静态方法中:Inner inner = new Inner();/可直接创建成员内部类的对象成员内部类举例 class A private int s;/public class B public void mb() s = 100; /System.out.println(在内

46、部类B中s= + s); public void ma() B i = new B();i.mb(); public class Test public static void main(String args) A o = new A(); o.ma(); 成员内部类举例同名属性的区分public class A private int s = 111; public class B private int s = 222;public void mb(int s) System.out.println(s); / 局部变量s System.out.println(this.s); / 内部

47、类对象的属性s System.out.println(A.this.s); / 外层类对象属性s public static void main(String args)A a = new A();A.B b = a.new B();/等价于A.B b = new A().new B();b.mb(333); 成员内部类private内部类中的private属性,在宿主类中可以访问到private class Innprivate int i = 2; 在成员内部类中可以定义static final的属性,不能单独用static修饰.如果一个内部类使用static声明,则此内部类就称为静态内部

48、类。在宿主类之外在权限允许时可以通过宿主类名.内部类名来访问。Outer.Inner inner = new Outer.Inner();在宿主类内部无论是不是静态方法中,都可以直接创建该内部类的对象/*Demo01.*/StaticInn sti = new /*Demo01.*/StaticInn();/可以省略host类名静态内部类静态内部类不会持有外部类的引用,创建时可以不用创建外部类对象.静态内部类可以访问外部的静态变量,如果要访问外部类的成员变量必须通过外部类的实例访问静态内部类举例可以不写host类名静态内部类的使用场景构建器WeiXin.javaWeiXin(Builder).

49、/host的构造方法static class Builder/static内部类Builder setAge(int). .WeiXin build()return new WeiXin(this);Client.javaWeiXin weixin = new WeiXin.Builder(tom, 123)/创建静态内部类的对象.setAge(20).setSex(男).setEmail( ).build();局部内部类也叫区域内嵌类局部内部类与成员内部类类似,但局部内部类类是定义在一个方法中的内嵌类,所以类的作用范围仅限于该方法中,而类生成的对象也只能在该方法中使用。另外,由于是在方法中定

50、义,因此区域内嵌类不能加上private,protected,public中的任何一个修饰符不能包含静态成员局部内部类举例如果一个内部类在整个操作中只使用一次的话,就可以定义为匿名内部类没有名字的内部类,这是java为了方便我们编写程序而设计的一个机制,因为有时候有的内部类只需要创建一个它的对象就可以了,以后再不会用到这个类,这时候使用匿名内部类就比较合适匿名类内部不用声明类名称,而是用new直接产生一个对象。匿名内部类是在抽象类和接口的基础上发展起来的。它可以是继承某个类,或是实现某个接口。Demo在文件管理方面,内嵌匿名类编译后生成的.class文件的命名方式是”外部类名称$编号.clas

51、s”,编号为1,2,3n,编号为x的文件对应的就是第x个匿名类public class AnonymousClassDemo01 public static void main(String args) / 匿名内部类的对象赋值给父类的引用Father f = new Father(100)public void m()System.out.println(匿名内部类重写父类的m()方法1);f.m();/匿名内部类作为方法的实参n( new Father(100)public void m()System.out.println(匿名内部类重写父类的m()方法2); );static void n(Father f)f.m();abstract class FatherFather(int age)System.out.println(Father类的构造方法);public abst

温馨提示

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

评论

0/150

提交评论