版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Java应用教程第3章 Java面向对象程序设计第 3 章 Java面向对象程序设计3.1 面向对象程序设计3.2 类 和 对 象3.3 包3.4 继 承3.5 多 态3.6 特 殊 类3.7 接 口3.1 面向对象程序设计面向对象程序设计是力图使计算机语言对事务的描述与现实世界中该事务的本来面目尽可能一致.类(class)和对象(object)是面向对象方法的核心概念.类是对一类事务的描述,是抽象的,概念上的定义;对象是实际存在的该类事物的每个个体,因而也称为实例(instance). 类是用来创建对象的模板,它包含被创建对象的属性和方法的定义。类封装了一类对象的状态属性和方法是类对象原型,
2、是一种抽象和复杂的数据类型.如:integer是一个整数类,它描述了所有整数的性质. 1,2等具体整数都是integer类的具体对象,都具备算术运算和大小的处理能力.创建一个新类,就是创建了一种新的数据类型, 实例化一个类,就创建了一个对象.所以可把类理解为一种新的数据类型,一旦声明后,就可以用它来创建对象(实例). 类是对象的模版, 对象是类的实例,所以要使用对象,就必须先定义类.类包括了数据和代码两部分.数据是类中的实例变量,代码是类中的方法,两者都称为类的成员.对象是一些相关的变量和方法的软件集. 对象是模仿现实世界中的一些实体,如汽车有自己的状态属性(大车,小轿车,货车,颜色等)和行为
3、(刹车,加减速度,换挡等),软件对象用多个变量来描述它的状态属性,用它的方法来执行它的行为.方法是跟对象有关联的函数.3.2 类 和 对 象Java语言与其它面向对象语言一样,引入了类和对象的概念,类是用来创建对象的模板,它包含被创建对象的属性和方法的定义。因此,要学习Java编程就必须学会怎样去编写类,即怎样用Java的语法去描述一类事物共有的属性和行为。对象的属性通过变量来刻画,而对象的行为通过方法来体现。方法可以操作属性形成一定的算法来实现一个具体的功能。类把属性和方法封装成一个整体。3.1 类的创建类是组成Java程序的基本要素,也是Java中重要的引用数据类型.类封装了一类对象的状态
4、属性和行为方法,是类对象的原型.创建一个新类,就是创建一种新的数据类型,即引用数据类型.。一个Java类主要包括以下两部分: 类的声明 类体3.1.1 类的声明语法格式: class /声明本类要执行的一个或多个接口修饰符用于指定类的访问权限,可选值为public、abstract和final说明类的属性。public关键字声明的类可以在其它任何的类中使用; abstract关键字声明的类不能被实例化. final关键字声明的类不能被继承,即没有子类. final最终的,用于指定局部变量为常量。.Class是关键字用来定义类,类名必须是合法的Java标识符,并且首字母大写,但不是必须的。ext
5、ends是关键字,用来说明该类是SuperclassName类的子类, SuperclassName是该类的父类的名字(也称超类);implements是关键字, 用来声明本类要执行(实现)的一个或多个接口, interfaceNameList是本类所执行的接口的名字列表,以逗号分隔的.两个大括号间的内容为类体.如: class Person 叫作类声明, Person是类名称,习惯类名第一个字母大写,但不是必须的. 3.1.2 类体类体跟在类声明的后面,它是嵌入在大括号 间的.类体中定义该类中所有的变量和所支持的方法.如:class Person int age; /成员变量 int get
6、Age() /成员方法 return age; Void setAge(int i) /成员方法 age = i; 类中所定义的变量和方法都是类的成员.3.1.3成员变量和局部变量类的状态是由它的成员变量给出的,可以在类体中声明一个类的成员变量.在类体中,变量声明部分所声明的变量被称为类的成员变量(有全局变量的概念,在整个类中有效);在方法体中,声明的变量和方法中的参数被称为局部变量.对类的成员变量来说,分为实例成员变量和类变量,如果用修饰符static声明的变量称为类变量(也称静态变量-本质上是全局属性),可以直接通过类名访问,类名. 静态变量。 没有static声明的为实例成员变量用对象来
7、访问.成员变量的类型可以是Java中的任意数据类型,包括简单类型,类,接口和数组. 成员变量在类的定义中声明,在类中成员变量的名字是唯一的,并且首字母小写,第二个单词首字母大写。.在创建对象的同时创建有关的成员变量, 成员变量创建后系统自动对其进行默认初始化或显示初始化. 成员变量依附于对象(局部变量)的存在而存在,具有与对象相同的生存期和作用域. 如: public class Person private int age; /私有实例成员变量 public String name=“ Lila”; /公有实例成员变量对于一个成员变量,可以使用不同的限定符,以限定不同的访问权限.privat
8、e: 变量可以被类中的代码访问.public: 适用所有类访问friend: 变量可以被工程或组件中的代码访问.(友好的变量-default)protected: 可以被继承的类访问.static: 用来指定一个变量是静态变量(类变量),没有static修饰的变量是实例变量,类变量可以由类方法访问(反过来说类方法只能对类变量操作),也可以由实例方法访问(实例方法既能对类变量操作也能对实例变量进行操作).final: 用来声明一个常量,通常常量用大写字母.volatile: 用来声明一个由多线程共享的变量, 使得各线程对该变量的访问能保持一致.在方法或语句块内部定义的变量被称为局部变量, 局部变
9、量仅在它的方法内有效, 局部变量须先声明和初始化.局部变量声明语法格式:Data Type varName1=value1 ,varName2=value2.局部变量声明和初始化public void amethod() /成员方法int i; /在成员方法中声明的变量为局部变量i但未初始化int j =i+5; /声明局部变量但未初始化,出错.Double d= 3.14;MyDate m;m = new MyDate(12,10,1967);System.out.println(m.getyear();局部变量的作用域就是它所在的方法或语句块,在程序调用方法时,局部变量才被创建并可用,随方
10、法的退出, 局部变量将被销毁.例3-1 Test varible.java定义和使用局部变量关键字thispublic class Testvarible private int i=1;public void method1() / method1() 方法中局部变量i与成员变量i名字相同,成员变量i被隐藏int i=4, j=5;this.i = i + j; /要在该方法内使用成员变量i,必须使用关键字thisSystem.out.println(i); /输出局部变量i的值 4System.out.println(this.i); /输出成员变量i的值 9method2(7);publ
11、ic void method2(int i) / method2()int j=8;this.i = i + j;System.out.println(i); /输出局部变量i的值 7System.out.println(this.i); /输出成员变量i的值 15public static void main(String args) Testvarible t = new Testvarible ();t.method1();/System.out.println(i+j); /是否可以?/System.out.println(t.i); /是否可以?执行结果:3.1.4 成员方法Java
12、中类的对象行为由类的成员方法来实现。类的成员方法由方法声明和方法体两部分组成。其一般格式如下:修饰符 ( 参数列表) 方法体修饰符用于指定方法的访问权限,可选值为public、protected和private。方法返回值的类型用于指定该方法的返回值的类型,如果该方法没有返回值,必须使用关键字void进行标识。方法返回值的类型可以是任何Java数据类型。方法名用于指定成员方法的名称,方法名必须是合法的Java标识符。参数列表用于指定方法中所需的参数。当存在多个参数时,各参数之间应使用逗号分隔。方法的参数可以是任何Java数据类型。方法体是方法的实现部分,在方法体中可以完成指定的工作,可以只打印
13、一句话,也可以省略方法体,使方法什么都不做。需要注意的是:当省略方法体时,其外面的大括号一定不能省略。用修饰符static声明的方法称为类方法(静态方法), 可以直接通过类名访问,类名. 静态方法(参数列表)。否则称为实例方法,用对象来调用.例3-2 Testmethod.java 定义和使用方法class Testmethod /定义实例成员变量double x, y . double x, y ; /定义静态变量float markstatic float mark; /定义实例成员方法,实例方法既能对类变量操作,也可以对实例变量操作,返回值类型float float total(floa
14、t a, float b) float total; x=0.4;y=0.6; total=(float)(x* a+ y* b); return total; / total= (0.4*67+0.6*98)=85.6返回给调用方mark /定义静态方法(类方法)只能对静态变量(类变量)mark操作,不能对实例成员变量x, y操作. static void setmark(float i) mark=i;/定义静态成员方法取的成绩static float getmark( ) return mark ;/类的实例成员方法public void display() System.out.pri
15、ntln(The total score + = + mark);public static void main(String args) /main方法 Testmethod tm = new Testmethod (); /创建类的对象mark=tm.total(67,98); /调用total(float a, float b)方法并传递参数tm.display(); /调用display()方法打印成绩tm.setmark(96); /调用静态方法/Testmethod.setmark(98); /是否可以?tm.display();/ System.out.println(The t
16、otal score + = + Testmethod.mark); /是否可以?执行结果: 多态多态是面向对象程序设计的重要部分,是面向对象的3个基本特性之一。在Java语言中,通常使用方法的重载(Overloading)和覆盖(Overriding)或称为方法的重写实现类的多态性。3.1.5 方法的重载方法重载(overloading)是指在一个类中,出现多个方法名相同,但它们在参数类型,个数和顺序上有所不同的方法,则称为方法的重载 .Java在执行具有重载关系的方法时,将根据调用参数的个数和类型区分具体执行的是哪个方法,重载和方法的返回值无关,返回值可相同也可不相同。(在编
17、译时进行参数匹配选择)【例3-3】Testoverload.java -方法的重载class TestoverloadString name;String sex; void student() name = wangfei; System.out.println(name=+name); /输出学生姓名 /方法重载接受姓名参数 void student(String str) name = str; sex= male; System.out.println(name=+name+ sex=+male); /输出姓名和性别 /方法重载接受姓名和性别参数 void student(String
18、 str, String n) name = str; sex=n; System.out.println(name=+name+ sex=+sex); /输出姓名和性别 / /方法重载接受姓名和年龄参数 boolean student(String str, int a) name = str; int age=a; System.out.println(name=+name+ age=+age); /输出姓名和年龄 return true; public static void main(String args ) Testoverload d = new Testoverload();
19、/创建Testoverload类的对象实例/对象调用类的各成员实例方法并传递实参给接受的形参实现方法的重载 d.student( ); d.student(Liyan); d.student(Liyan , female); d.student(Yanlan, 22 );例子可看出4个方法有相同名student, 但它们有不同的参数个数, 不同的参数类型和不同的返回值. 在调用方法时,可不带参数,或带一个参数两个参数. 编译器会根据参数列表数目及类型来决定调用哪个方法.注意:如果两个方法的参数类型和个数完全一样,只是返回类型不一样,则会出现编译错误,因为返回值的类型不能区分重载的方法。执行结果
20、:3.1.6 构造函数(方法)构造函数(方法)用来对创建的对象的所有成员变量进行初始化的特殊的方法,在创建对象时立即被调用或系统自动调用,方法名同类名,并且没有返回值,也不需要使用关键字void进行标识,如:public class Apple public Apple() /方法名同类名构造方法 构造函数特点(1) 构造函数的名称必须与它所在的类的名字完全相同.(2) 构造函数不返回任何数据类型,即它是void型,但不能写void.(3) 构造函数一般不能由编程人员显示地直接调用,必须通过运算符new调用或在创建对象时由系统自动调用.构造函数是个初始化理想的存储单元,因为它必须在调用任何其它
21、方法之前运行,而且对于每个对象,它只运行一次.当然,可以基于一个类创建出许多对象.一个类可能包含一个或多个构造函数,它提供从类创建对象的初始化.如果在创建类时没有为类定义任何构造函数,系统会自动产生一个构造函数,称为默认构造函数. 默认构造函数不带参数,并且方法体是空的.因此所有Java类都有构造函数,它用来对新的对象进行初始化.声明构造函数的语法: (argu_list参数列表) 【例3-4】Useconstruct.java 使用构造函数class Mydata /声明类Mydataprivate int day; /声明类的成员变量private int month;private in
22、t year;public Mydata() /声明无参数构造函数,构造函数名称和它的类名完全相同day = 12; /初始化成员变量month = 12;year = 1986;public Mydata(int y) /声明有参数构造函数day = 1;month = 05;year = y;public Mydata(int d,int m,int y) /声明有参数构造函数day = d;month = m;year = y;public void display()System.out.println(day + “-” + month + “-” + year); /输出成员变量值
23、public static void main(String args)Mydata m1 = new Mydata(); /创建Mydata类的实例对象并实现构造方法的重载Mydata m2 = new Mydata(2000);Mydata m3 = new Mydata(1,01,2005);m1.display(); /对象调用display()方法输出成员变量值m2.display();m3.display();执行结果:Java支持对构造函数的重载,一个类就可以有多个构造函数,例程有四个构造函数,名字相同,但参数列表不同,构成方法重载.编译器会根据参数列表数目和类型区分这些构造函数
24、,构造函数根据参数来初始化堆栈的大小.创建对象时,选择构造函数要看它的参数是否最好反映了想初始化的新对象.注意: 构造函数不能有返回值,是因为返回值需要在调用时对一个变量进行赋值. 构造函数是由系统自动调用的,不能对变量赋值,所以不能有返回值.4.3.3 对象的引用和实体当用类创建一个对象时,类中的成员变量被分配内存空间,这些内存空间称为该对象的实体,而对象中存放着引用,以确保实体由该对象操作使用。1参数传值当方法被调用时,方法中的参数必须要实例化,即参数变量必须要有具体的值。在Java中所有的参数都是传值的,也就是说,方法中参变量的值是调用方指定的值的副本。方法如果改变参数的值,但不会影响参
25、数传值的变量的值。2基本数据类型参数的传值可传入较高数据类型,如不可向int型传一个float值,但可以向double型参数传递一个float值。3. 引用数据类型参数的传值- 传递的是变量的引用而不是变量所引用的实体。如果改变参数变量所引用的实体,就会导致原变量的实体发生同样的变化,因为两个同类型的的引用型变量有相同引用时,就会有同样的实体。但是改变参数的引用不会影响向其传值的变量的引用。【例4.5】Example4_5.java -参数传值class People int money; void setMoney(int n) money=n; /8888 class A void f(d
26、ouble y,People p) /传入值0.8 ,对象zhang y=y+1; p.setMoney(100); /调用setMoney方法传入值100 System.out.println(参数y的值分别是:+y); /1.8 System.out.println(参数对象p的money是:+p.money); /100 public class Example4_5 public static void main(String args) double y=0.8; /局部变量 People zhang=new People(); zhang.setMoney(8888); A a=n
27、ew A(); System.out.println(在方法f被调用之前对象zhang 的money是:+ zhang. money+ y的值是:+y);a.f(y,zhang); System.out.println(在方法f被调用之后main方法中y的值仍然是: +y); /方法改变参数的值,但不会影响参数传值的变量的值,值传递。System.out.println(在方法f被调用之后main方法中对象zhang的money是:+zhang. money); /100引用传递 【例4.6】Example4_6.java 圆锥对象class 圆 double 半径; 圆(double r)
28、/构造函数 半径=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;
29、 void 修改底圆半径(double r) 底圆.修改半径(r); double 获取底圆半径() return 底圆.获取半径(); class Example4_6 public static void main(String args) 圆 circle=new 圆(10); /创建圆对象/创建圆锥对象把圆对象的引用参数圆对象圆锥高传入给圆锥构造函数 圆锥 circular=new 圆锥(circle,20); System.out.println(圆锥底圆半径:+circular.获取底圆半径(); System.out.println(圆锥的体积:+circular.计算体积();
30、 circular.修改底圆半径(100); System.out.println(圆锥底圆半径:+circular.获取底圆半径(); System.out.println(圆锥的体积:+circular.计算体积(); 3.1.7 this的用法this代表当前对象.当一个方法需要激活它的对象时,既可利用this实现该功能. this可看成类对象的别名,使类中的隐蔽数据及方法可以引用. this可用在实例方法和构造方法中,不能出现在(类)静态方法中,在构造方法中this代表使用该构造方法创建的对象,this在实例方法中代表正在调用该方法的当前对象。this既能充当方法参数,又能够作为方法的
31、返回值.当方法内的局部变量和类的成员变量的名字相同时,成员变量就会被隐藏,这时如果想在成员方法中使用成员变量,则必须使用关键字this。语法格式为:this.成员变量名this.成员方法名()【例3-5】Testthis.java - this的用法class College int a; /类的成员变量apublic static void main(String args) int a=6; /main()方法中的局部变量名a与成员变量a相同,成员变量a被隐藏 College bb=new College(); /创建类的对象 System.out.println(“main().a=”+
32、a); /输出main()方法中的局部变量6,成员变量a被隐藏 System.out.println(bb.a=+bb.call(); /类对象调用call()方法输出类的成员变量a=9 int call() int a=9; /call()方法中的局部变量a,成员变量a被隐藏/局部变量a=9赋给类的成员变量this.a后自增1(This可看成类College对象bb的别名(代表正在调用该方法的当前对象),自增前计算的a值) this.a=a+; System.out.println(call().a=+a); /输出call()方法中的局部变量自加1成为10 return this.a; /
33、返回成员变量的值9给调用方输出 执行结果:3.2 类的继承继承(inheritance)就是重用其它类中的方法和属性来创建新类.用关键字extends来创建一个父类的子类(Subclass),子类继承父类(Superclass)中除private,static修饰的方法和属性,在Subclass中可以添加更多的属性和方法.如果在类中没有用到extends关键字, java默认该类为java.lang.Object的子类,所有类都是直接或间接继承类java.lang.Object得到的. Java只支持单继承,即一个子类只能有一个父类,一个父类可以派生出多个子类,而不允许多重继承,即一个子类可以
34、同时继承多个父类.但java中的接口提供了类似多重继承的特性.通过继承能够较好地实现代码重用,提高编程效率。子类包含所有父类的属性和方法,也可在子类中添加属性和方法,还可隐藏和修改父类中的属性和方法.3.2.1 继承的使用原则子类可以继承父类中所有可被子类访问的成员变量和成员方法,但必须遵循以下原则:(1)子类能够继承父类中被声明为public和protected的成员变量和成员方法,但不能继承被声明为private的成员变量和成员方法;(2)子类能够继承在同一个包中的由默认修饰符修饰的成员变量和成员方法,既友好的成员变量和成员方法;(3)如果子类声明了一个与父类的成员变量同名的成员变量,则子
35、类不能继承父类的成员变量,此时称子类的成员变量隐藏了父类的成员变量;(4)如果子类声明了一个与父类的成员方法同名的成员方法,则子类不能继承父类的成员方法,此时称子类的成员方法覆盖了父类的成员方法。3.2.2 创建子类用关键字extends创建一个父类的子类,子类可从它的父类继承所有非private修饰的属性和方法,格式为:class Subclass extends SuperclassJ3_13.java -继承import java.util.*; /引入java.util.*包中所有类(Date类定义在java.util包中)class Person /父类Personpublic St
36、ring name; / Person类的成员变量 public int age; public Date birthDate;public String getInfo() / Person类的成员方法return name: + name + nage: + age ; /通过继承简化了子类Student的定义,实现代码重用.class Student extends Person /由于子类继承父类中的成员,在子类中只需添加成员变量schoo,不须再定义姓名年龄和生日实现代码重用提高编程效率 public String school; class Testpublic static vo
37、id main(String args)Student s = new Student(); /创建子类Student的对象,并用s引用变量代表Student对象 = bily; /访问父类成员变量并赋值.s.age = 18; /访问父类成员变量并赋值.s.school =University of KM; /给子类自己的成员属性赋值/子类对象调用父类Person的成员方法并输出返回的成员变量值.System.out.println(s.getInfo()+nUniversity: +s.school); 执行结果:3.2.3 成员变量的隐藏和方法的覆盖如果子类中定义的成员变量和
38、父类中的成员变量完全相同,则子类不能继承父类的成员变量,此时称子类的成员变量隐藏了父类的成员变量,同样,如果在子类中定义的方法和父类中定义的方法在名字,返回类型参数个数和参数类型完全相同,此时父类中的方法被隐藏,则子类不能继承父类的成员方法,此时称子类的成员方法覆盖或重写了父类的成员方法。注意:如果子类覆盖(重写)了父类的方法和属性,则运行时系统调用子类的方法和属性,如果子类继承了父类的成员方法和属性(未重写),则运行时自然调用父类的方法和属性,这种机制被称为运行时多态.【例3-6】Testovermethod.java -方法覆盖class Person /父类Person String n
39、ame; int age; int getAge() /获得年龄方法return age; void setAge(int i) /设置年龄方法age = i; String getName() /获得姓名方法return name; void setName(String str) /设置姓名方法 name=str; public String getInfo() /获得年龄姓名方法return Name: + name + n +age: + age; class Student extends Person /子类Student String Univ; /子类添加成员变量,由于继承了父
40、类的nameage因此在子类中不需再定义 String getUniv() /子类添加成员方法取的大学名 return Univ;void setUniv(String str) /子类添加成员方法设置大学名称 Univ=str; /子类getInfo()方法名与父类方法名同名覆盖父类方法即子类重写了父类的方法,子类继承父类成员变量nameage即调用父类的属性nameage运行时多态public String getInfo() return Name: + name + nage: + age+ nUniversity: + Univ; public class Testovermetho
41、dpublic static void main(String args) Student bini = new Student(); /创建子类Student对象 bini.setAge(19); /子类继承了父类setAge(int i)方法调用父类成员方法,给父类的成员age name赋值 bini.setName(Wang Ming); /子类继承了父类setName(String str)方法 bini.setUniv(Tshinghua University); /调用子类添加的新方法,给子类的成员Univ赋值/由于子父getInfo()方法同名,父类方法被隐藏,子类不能继承父类同名方法(即子类重写了父类的方法) System.out.println(bini.getInfo(); 执行结果:3.2.4 关键字 static在java类中声明属性和方法时,可使用关键字static作为修饰符. static修饰的变量或方法由整个类共享,被称为类变量和类方法或称(静态变量和静态方法)。类变量和类方法可不必创建该类对象而直接用类名加.调用。【例3-7】Teststatic.jav
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 长城电源2026届春季校园招聘备考题库附参考答案详解【夺分金卷】
- 2026年吉林省辽源市高职单招职业技能考试题库附答案详解
- 2026广东河源市妇幼保健院招聘合同制专业技术人员25人备考题库附参考答案详解ab卷
- 2026江西赣州市就业创业服务中心招募青年见习1人备考题库含答案详解(b卷)
- 2026云南今邦日杂再生资源有限公司招聘业务员1人备考题库及参考答案详解【达标题】
- 2026汉江实验室三亚研究中心(三亚深海科学与工程研究所)招聘20人备考题库及答案详解【有一套】
- 2026辽宁丹东国有资本投资运营集团有限公司面向社会招聘备考题库【有一套】附答案详解
- 2026山东德州市宁津县招聘教师23人备考题库(研优卷)附答案详解
- 2026上半年四川成都市双流区教育系统考核招聘教师3人备考题库及参考答案详解【突破训练】
- 2026湖南永州市双牌县融媒体中心(双牌县广播电视台)招聘1人备考题库附完整答案详解(夺冠系列)
- 警察开学安全课件
- 2025年护士执业资格考试历年真题汇编与解析
- 快手直播培训
- 2025年生猪养殖二育猪育肥服务合同
- 2025年广东省高职院校五年一贯制转段考试文化课测试(数学)
- 公交驾驶员培训试题及答案
- 2026届新高考生物精准冲刺复习:基因定位
- (必看)2025年3月29日陕西省事业单位联考C类《职测》真题及答案
- 拉森钢板桩施工专项技术方案
- 新能源装备制造项目风险评估报告
- 2025年航空保险行业无人机保险市场前景研究报告
评论
0/150
提交评论