




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第5章 基于对象程序设计本章主要内容:1类、对象和封装。2声明和使用字段。3声明和使用属性。4常数和只读字段5成员访问控制。6类作用域。调用类成员。7默认属性。使用动态数组。8属性与字段的比较。属性和方法的比较9使用Me 关键字。10实例构造函数。11默认实例构造函数。12对象创建表达式。13默认初始化字段。显式初始化字段。14实例构造函数重载。15调用同类中的其它构造函数。16调用不同的实例构造函数创建对象。多个类的使用。17静态字段和实例字段。18静态构造函数。静态方法。19静态和实例成员特征。20对象参数与返回值为对象。对象的赋值运算。21重载方法。使用重载的方法目标:· 区分
2、类和对象,区分对象声明与对象创建。· 区分字段和属性。· 定义可实例化类及构造函数。· 创建、使用对象。· 使用实例构造函数重载及方法重载。· 理解静态成员和实例成员及它们访问方式的区别。· 理解成员访问修饰符public和private。· 定义实例成员和静态成员。· 使用对象参数和返回值为对象的方法第1节 类、对象和封装 “类”和“对象”在面向对象的编程中使用得非常多,很容易将它们混淆。一般来说,“类”是一些内容的抽象表示形式,而“对象”是类所表示的内容的可用示例。类描述对象的“结构”,而对象则是类的可用“实例
3、”。每个实例都是其类的一个精确而又不同的副本。由于对象是类的一个“实例”,所以创建对象的动作就称为“实例化”。使用蓝图类比,类是蓝图,对象就是基于该蓝图的建筑。大部分情况下,更改一个对象中的数据并不会更改其他任何对象中的数据。面向对象使用类来封装数据(属性)和方法(行为)。封装使对象能够向客户隐藏它们的实现-该原则称为信息隐藏。尽管客户可以通过对象良好定义的接口使用它。正如驾驶员在不知道发动机、变速器和转向等系统使任何工作的情况下,驾驶员也能够有效地驾驶汽车。封装还使你可以控制如何使用数据和过程。可以使用访问修饰符(如 Private 或 Protected)来防止外部过程执行类方法或读取与修
4、改属性和字段中的数据。应当将类的内部详细信息声明为 Private 以防止在类外使用它们,此技术称为“数据隐藏”。在 loan 类中,贷款信息(如贷款数量)就是用这种方式保护的。封装的一个基本规则是类数据应当只能通过 访问器或方法来修改或检索。隐藏类的实现详细信息可以防止这些信息被以不希望的方式使用,并使你可以在以后修改此类项时没有兼容性问题方面的风险。类使你得以只声明一次变量和方法,然后在任何需要的时候重用它们。例如,如果要将贷款计算器添加到应用程序中,可以定义所有变量和方法,以便为应用程序提供贷款计算功能。但是,如果将贷款计算器创建为一个类,则可以在其他应用程序中重用该类。更好的是,可能能
5、够通过使用其他人已经开发的贷款计算器类,省去自己的一些工作。类可以定义对象的属性和执行的操作(方法),并定义保存对象状态值的变量(字段)。在面向对象的概念里,现实世界的个体(对象)将抽象化为程序中的对象,而个体(对象)的数据抽象化为对象的数据成员(字段和常量),即个体(对象)的特性抽象化为对象的属性,个体(对象)的行为及处理问题的方法成为对象的方法。类的实例是对象。对象可以执行类定义的操作,处理属于类定义的数据,可以通过调用对象的方法并访问其属性,来访问对象的功能。第2节 字段字段是表示与对象或类关联的变量, 它用来存储对象状态的值或属性的值,即字段用来存储对象的数据。如果把字段声明为publ
6、ic,那么在类外面能够访问该字段。在类外面,访问字段的语法是:对象名.字段名既然在类外面能够访问字段(给字段赋值、读取字段的值),那么我们为什么在声明类时,还要声明访问器(设置或检索属性值的方法)来获取和设置这些字段的值呢?系统开发人员的一个目标是,他们设计的类不但对客户隐藏了方法的实现,而且不允许客户直接访问字段。通过提供访问器来获取和设置这些字段的值,可以确保字段被正确地对待(即符合逻辑规则)而且执行所需地附加处理。为了说明这一点,请看以下实例。2.1 实例:改写贷款计算器问题描述:编写一贷款计数器程序,对于特定的代款数量、年利率和贷款周期,计算月付款和总付款。分析:由问题描述可知,贷款(
7、Loan)对象具有代款数量、年利率和贷款周期属性。对于每个贷款都具有确定的代款数量、年利率和贷款周期,但它们的值可能不同。贷款周期即可以是年作为单位,也可以是月作为单位。因此在贷款类中,我们声明两个字段years和months,以存储贷款周期(years的值表示以年为单位的贷款周期,months值表示以月为单位的贷款周期),years和months这两个字段在逻辑上是相关的(months的值是years值的12倍,years的值是months的值12等份)。1.打开前面创建的LoanCalculatoApp项目中的代码文件LoanCalculator.vb,修改LoanCalculator类(
8、带底纹部分)。public class Loan private final int MONTHS_IN_YEARS=12; /声明字段常量 private double loanAmount; /声明字段 loanAmount private int years;/声明字段 years private int months;/声明字段months private float annualInterestRate;/声明字段 annualInterestRate /声明读取属性LoanAmount的值方法 public double getLoanAmount() return loanAmo
9、unt; /声明设置属性LoanAmount的值的方法 public void setLoanAmount(double newloanAmount) loanAmount=newloanAmount; /声明设置属性Years的值的方法 public void setYears(int newyears) years=newyears; months = newyears * MONTHS_IN_YEARS; /声明读取属性Years的值的方法 public int getYears() return years; /声明读取属性Months的值的方法 public int getMonth
10、s() return months; /声明设置属性Months的值的方法 public void setMonths(int newmonths) years=newmonths/MONTHS_IN_YEARS; months = newmonths; /声明读取属性AnnualInterestRate的值的方法 public float getAnnualInterestRate() return annualInterestRate; /声明设置属性AnnualInterestRate的值的方法 public void setAnnualInterestRate(float newAnn
11、ualInterestRate) annualInterestRate=newAnnualInterestRate; /声明计算月付款的方法 public double computeMonthlyPayment() float monthlyInterestRate; int numberOfPayments ; double monthlyPayment ; monthlyInterestRate = annualInterestRate / 100.0f / MONTHS_IN_YEARS; numberOfPayments = getMonths(); monthlyPayment =
12、 (loanAmount * monthlyInterestRate) / (1 - (Math.pow(1 + monthlyInterestRate), -numberOfPayments); return monthlyPayment; /声明计算总付款的方法 public double computeTotalPayment() double totalPayment ; totalPayment = computeMonthlyPayment()*getMonths(); return totalPayment; 2打开前面创建的LoanCalculatoApp项目中的代码文件Loa
13、nCalculatorTest.vb,修改LoanCalculatorTest类(带底纹部分),然后保存文件。public class LoanTest public static void main(String args) /声明3个变量 double aloanAmount, monthlyPayment, totalPayment ; /创建贷款计算器对象 Loan aLoan=new Loan(); /调用贷款计算器对象的setLoanAmount方法 / 将贷款计算机对象贷款数量的值设置为2000.0 aLoan.setLoanAmount(20000.0); / 调用贷款计算器对
14、象的setLoanPeriod方法 /将贷款周期属性的值设置为12(单位年) aLoan.setYears(12); /调用贷款计算器对象的setAnnualInterestRate方法 /将年利率属性的值设置为7(即7%) aLoan.setAnnualInterestRate(7.0f); /调用贷款计算器对象的computeMonthlyPayment方法计算月付款 / 并将方法的返回值付给变量 monthlyPayment monthlyPayment=aLputeMonthlyPayment(); /调用贷款计算器对象的computeTotalPayment方法计算总付款 / 并将方
15、法的返回值付给变量totalPayment totalPayment=aLputeTotalPayment(); / 调用贷款计算器对象的getLoanAmount方法读取贷款数量属性的值 aloanAmount=aLoan.getLoanAmount(); /调NumberFormat类的getCurrencyInstance / 创建 NumberFormat对象currencyformatter /准备将指定数值的格式化为货币 NumberFormat currencyformatter=NumberFormat.getCurrencyInstance(); /连接字符串付给String
16、类型的变量output String output="贷款金额: "+currencyformatter.format(aloanAmount)+"n"+ "贷款周期: "+aLoan.getMonths()+"(月)n"+ "年利率: "+aLoan.getAnnualInterestRate()+"%"+"n"+ "月付款: "+currencyformatter.format(monthlyPayment)+"n&quo
17、t;+ "总付款: "+ currencyformatter.format(totalPayment)+"nn" aLoan.setMonths(24); monthlyPayment = aLputeMonthlyPayment(); totalPayment = aLputeTotalPayment() ; output+="贷款金额: "+currencyformatter.format(aloanAmount)+"n"+ "贷款周期: "+aLoan.getYears()+"(
18、年)n"+ "年利率: "+aLoan.getAnnualInterestRate()+"%"+"n"+ "月付款: "+currencyformatter.format(monthlyPayment)+"n"+ "总付款: "+ currencyformatter.format(totalPayment)+"n" /在消息框中显示字符串output JOptionPane.showMessageDialog( null,output, &quo
19、t;结果",+JOptionPane.INFORMATION_MESSAGE); System.exit(0); 3按F5编译并运行该程序,运行结果如图5.1所示。图5.1 程序运行结果代码分析与讨论:1)通过访问器来获取和设置字段的值,可以确保字段的值是正确的。例如,贷款的数量不可能是一个负数,通过以上定义的setLoanAmount访问器,可以确保loanAmount字段的值不是一个负数。因为Set 方法可提供验证代码以防止不正确地更新贷款数量。简而言之,访问器允许对象保护和验证自己的数据。2)通过访问器来设置字段的值,可确保对一个字段的设置会正确的影响其它相关联的字段或属性的值
20、。,例如,Loan类包含两个在逻辑上相关的字段years和months,当客户(使用者)修改字段years的值时,访问器setYears对设置的值进行验证,并根据给years设置的值设置months字段的值。如果客户可以直接访问访问公共的(public)years字段和months字段,那么就无法保证它们的值是有效的,也无法保证months字段的值和years字的值不相矛盾(因为客户可给years设置为12,而给months的设置为2,正确的应该是years值为12时,months的值必须是144)。Public Sub setYears(ByVal newyears As Integer)
21、If newyears > 0 Then years = newyears months = newyears * MONTHS_IN_YEARS Else years = 0 months = 0 End IfEnd Sub同理,访问器setMonths确保months字段的值和years字的值不相矛盾,并确保它们的值是正确的。例如,客户通过访问器setMonths将months字段的值修改为24后,years字的值为2,程序运行的结果就证明了这一点。3)常数。常数就是其值不能改变的字段。如实际例中声明了一常数MONTHS_IN_YEARS,它的值在程序运行过程中始终是12,且不能被改
22、变。4)如果几个字段或属性相互关联,则可省略一些字段的声明,不必每个属性声明一个字段。例如,years字段和months字段相互关联,则我们可省略其中一个字段的声明。我们修改Loan类,删除years字段的声明,然后修改访问器setYears,getYears、setMonths、getMonths()如下,可获得同样的结果。Public Sub setYears(ByVal newyears As Integer) If newyears > 0 Then months = newyears * MONTHS_IN_YEARS Else months = 0 End If End Su
23、b ' /声明读取属性years的值的方法 Public Function getYears() As Integer Return months / MONTHS_IN_YEARSEnd Function/声明读取属性Months的值的方法 Public Sub setMonths(ByVal newmonths As Integer) If newmonths > 0 Then months = newmonths Else months = 0 End If End Sub ' /声明读取属性Months的值的方法 Public Function getMonths
24、() As Integer Return months End Function2.2 常数和只读字段。1. 常数。常数就是其值不能改变的字段。常数也是类的成员之一,它表示一个常数值:一个可以在编译时计算的值。在将某些东西定义为常数时需要记住二条原则:l 常数成员的值是一个在编译时计算的值。l 要想将字段声明为常数,只需在被声明的字段前指定final关键字。如改写贷款计算器实例中声明了一常数MONTHS_IN_YEARS,它的值在程序运行过程中始终是12,且不能被改变:private final int MONTHS_IN_YEARS=12; /声明字段常量2. 只读字段。如果字段的值在编译时
25、无法计算出值,但要求字段被初始化就不能被修改,则可以使用 final关键字声明字段。当字段声明中含有 final修饰符但没被赋值时,该声明所引入的字段为只读字段。只有构造函数才能初始化只读字段,且只读字段的值只有构造函数才能修改。private final int a 2.3 成员访问控制访问修饰符public和private控制对类的字段、属性和方法的访问(下一小节将引入属性,第9章将引入另一个访问修饰符protected)。正如前面所提到的,公有(public)方法的主要目的是让类的客户了解该类所提供的服务(该类的public接口),而不必关心该类如何实现它的任务。因而,类的客户不能直接地
26、访问类的private字段,private属性和private方法。通过关键字private限制对类成员的访问称为信息隐藏。例如,在改写贷款计算器实例中,如果我们在TestLoan类的main方法中,将以下代码改为带底纹的代码,则在编译程序时,会发生编译错误,程序无法访问private字段loanAmount、months和annualInterestRate。如果将字段loanAmount、months和annualInterestRate的访问修饰符改为public,则程序运行不会发生错误。aLoan.setLoanAmount(20000.0) aLoan.setYears(12) aL
27、oan.setAnnualInterestRate(7.0) aLoan.loanAmount = 20000.0 aLoan.months = 12 aLoan.annualInterestRate = 7如果将该main方法放在Loan类中,则不会发生编译错误,可以访问private字段loanAmount、months和annualInterestRate。第3节 Set访问器和Get访问器Set访问器和Get访问器是一种用于访问对象或类的特性的方法。Set访问器用于设置属性的值,Get访问器用于获取属性的值。Set访问器和Get访问器通常称为标准方法,也称为Set方法和Get方法,Se
28、t方法的方法名前带有set,后面是属性名称,新的属性值通过 该方法的参数传递,该方法一般不会返回值,为void类型。如:public double getLoanAmount() return loanAmount; 3.1 实例:声明和使用属性问题描述:改写上例的贷款计算器程序,在Loan类中,用属性声明替换访问方法声明,并在TestLoan类中,使用属性。1.打开前面创建的LoanCalculatoApp项目中的代码文件LoanCalculator.vb,修改LoanCalculator类(带底纹部分)。Public Class Loan Private Const MONTHS_IN_Y
29、EARS As Integer = 12 Private m_loanAmount As Decimal '/声明字段 m_loanAmount 'Private years As Integer '/声明字段 years Private m_months As Integer '/声明字段 m_months Private m_annualInterestRate As Single '/声明字段 m_annualInterestRate '/声明属性LoanAmount Public Property LoanAmount() As Deci
30、mal Get Return m_loanAmount End Get Set(ByVal Value As Decimal) If Value < 0 Then m_loanAmount = 0 Else m_loanAmount = Value End If End Set End Property ' /声明属性Months Public Property Months() As Integer Get Return m_months End Get Set(ByVal Value As Integer) If Value > 0 Then m_months = Va
31、lue Else m_months = 0 End If End Set End Property '声明属性years Public Property Years() As Integer Get Return m_months / MONTHS_IN_YEARS End Get Set(ByVal Value As Integer) If Value > 0 Then m_months = Value * MONTHS_IN_YEARS Else m_months = 0 End If End Set End Property ' /声明属性AnnualInteres
32、tRate Public Property AnnualInterestRate() As Single Get Return m_annualInterestRate End Get Set(ByVal Value As Single) m_annualInterestRate = Value End Set End Property '/声明计算月付款的方法 Public Function computeMonthlyPayment() As Decimal Dim monthlyInterestRate As Single Dim numberOfPayments As Inte
33、ger Dim monthlyPayment As Decimal monthlyInterestRate = AnnualInterestRate / 100.0F / MONTHS_IN_YEARS numberOfPayments = Months monthlyPayment = (LoanAmount * monthlyInterestRate) / _ (1 - (Math.Pow(1 + monthlyInterestRate), -numberOfPayments) Return monthlyPayment End Function ' /声明计算总付款的方法 Pub
34、lic Function computeTotalPayment() As Decimal Dim totalPayment As Decimal totalPayment = computeMonthlyPayment() * Months Return totalPayment End FunctionEnd Class2打开前面创建的LoanCalculatoApp项目中的代码文件LoanCalculatorTest.vb,修改LoanCalculatorTest类(带底纹部分),然后保存文件。Public Class LoanTest Public Shared Sub main()
35、'声明3个变量 Dim loanAmount, monthlyPayment, totalPayment As Decimal '创建贷款计算器对象 Dim aLoan As Loan = New Loan '调用贷款计算器对象的LoanAmount属性的set访问器 '将贷款计算机对象贷款数量的值设置为2000.0 aLoan.LoanAmount = 20000.0 '调用贷款计算器对象的Years属性的set方法 '将贷款周期属性的值设置为12(单位年) aLoan.Years = 12 '调用贷款计算器对象的AnnualInter
36、estRate属性的set访问器 '将年利率属性的值设置为7(即7%) aLoan.AnnualInterestRate = 7 '读取计算器对象贷款数量属性的值,将其赋给aloanAmount变量 Dim aloanAmount As Decimal = aLoan.LoanAmount '读取计算器对象贷款周期属性的值,将其赋给aloanPeriod变量 Dim aloanPeriod As Integer = aLoan.Months '读取计算器对象年利率属性的值,将其赋给aannualInterestRate变量 Dim aannualInterest
37、Rate As Single = aLoan.AnnualInterestRate '调用贷款计算器对象的computeMonthlyPayment方法计算月付款 '并将方法的返回值付给变量 monthlyPayment monthlyPayment = aLputeMonthlyPayment() '调用贷款计算器对象的computeTotalPayment方法计算总付款 '并将方法的返回值付给变量totalPayment totalPayment = aLputeTotalPayment() ' 调用贷款计算器对象的getLoanAmount方法读取
38、贷款数量属性的值 aloanAmount = aLoan.LoanAmount Dim output As String ' 格式化字符串赋给String类型的变量output output = String.Format("贷款金额:0:c1贷款周期: 2(月)3年利率: 4%5月付款: 6:c7总付款: 8:c", _ aloanAmount, vbNewLine, aloanPeriod, _ vbNewLine, aLoan.AnnualInterestRate, _ vbNewLine, monthlyPayment, vbNewLine, totalPa
39、yment) output += vbNewLine & vbNewLine aLoan.Months = 24 monthlyPayment = aLputeMonthlyPayment() totalPayment = aLputeTotalPayment() output += String.Format("贷款金额:0:c1贷款周期: 2(年)3年利率: 4%5月付款: 6:c7总付款: 8:c", _ aloanAmount, vbNewLine, aLoan.Years, _ vbNewLine, aannualInterestRate, _ vbNew
40、Line, monthlyPayment, vbNewLine, totalPayment) MessageBox.Show(output, "结果") End SubEnd Class3按F5编译并运行该程序,运行结果如图6.1所示。图5.2 程序运行结果代码分析与讨论:1)属性声明。属性是对象或类的特性。与字段不同,属性有访问器,这些访问器指定要在它们的值被读取或写入时执行的语句。这些语句可以对字段和属性进行计算,并将计算结果返回给相关字段。对属性声明时必须指定属性的类型 、属性名称和属性的访问器声明,即: Property 属性名(参数列表)As 数据类型属性访问器声
41、明 End Property属性可以有参数,也可以没有参数,当有参数时,除了参数必须是值(ByVal)参数外,参数列表的声明与方法相同。属性访问器包含与获取(读取或计算)或设置(写)属性有关的可执行语句。属性访问器声明可以包含 get 访问器或 set 访问器,或者两者均包含。get 访问器或 set 访问器声明采用下列形式:Set accessor-bodyEnd SetGet accessor-bodyEnd Get此处: accessor-body 包含将在调用访问器时执行的语句的块。 如果已知属性名为 P,则类中包含使用此名称的声明,将导致编译时错误。2)get 访问器get 访问器相
42、当于一个无参数方法,该方法具有属性类型的返回值以及与包含属性相同的修饰符(已知属性名为 P,Get访问器声明隐式地使用与该属性相同的修饰符、类型和参数列表声明名为 get_P 的方法)。执行 get 访问器相当于读取字段的值。在get 访问器中,返回值作为属性值提供给调用表达式。以下粗体部分是返回私有字段 m_annualInterestRate 的值的 get 访问器:Private m_annualInterestRate As Single '/声明字段 m_annualInterestRatePublic Property AnnualInterestRate() As Sin
43、gle Get Return m_annualInterestRate End Get Set(ByVal Value As Single) m_annualInterestRate = Value End Set End Property当引用属性时,除非该属性为赋值目标,否则将调用 get 访问器读取该属性的值。例如:Dim aLoan As Loan = New Loan .Dim aannualInterestRate As Single = aLoan.AnnualInterestRate ' 调用get 访问器。如果类型中包含使用此名称的声明,将导致编译时错误。3)Set
44、访问器set 访问器相当于一个Sub方法,该方法具有单个属性类型的值参数以及与包含属性相同的修饰符(已知属性名为 P,set 访问器声明隐式地使用与该属性相同的修饰符和参数列表声明名为 set_P 的方法)。在set 访问器中, 新的属性值通过 Set 访问器的参数传递。如果声明一个显式参数(该参数不得有 ByVal 以外的任何修饰),则必须将其声明为与该属性相同的数据类型。如果不声明参数,编译器将使用隐式参数 Value 来表示赋给属性的新值。set 访问器隐式具有名为 value 的参数( value是隐式参数),此参数的类型是属性的类型。以下粗体部分是AnnualInterestRate
45、属性的Set访问器声明: Private m_annualInterestRate As Single '/声明字段 m_annualInterestRatePublic Property AnnualInterestRate() As Single Get Return m_annualInterestRate End Get Set(ByVal Value As Single) m_annualInterestRate = Value End Set End Property当对属性赋值时,用提供新值的参数(参数的值为赋值右边的值)调用 Set访问器。例如,以下语句调用Annual
46、InterestRate属性的Set访问器,将"王飞"传递给参数value,然后Set访问器中的代码。Person 1.Name = "王飞" ' 调用set 访问器。在 set 访问器中对局部变量声明使用隐式参数名 (value) 是错误的。注意:属性的数据类型和访问性是在 Property 语句中定义,而不是在属性访问器中定义。属性只能有一种数据类型和一种可访问性。例如,不能定义属性设置 Decimal 值而获取 Double 值。属性按如下方式,根据所使用的访问器进行分类: l 只带有 get 访问器的属性称为只读属性(此时属性声明必须具有
47、ReadOnly 修饰符)。无法对只读属性赋值。 l 只带有 set 访问器的属性称为只写属性(此时属性声明必须具有WriteOnly 修饰符)。只写属性除作为赋值的目标外,无法对其进行引用。 l 同时带有 get 和 set 访问器的属性为读写属性。 在属性声明中,get 和 set 访问器都必须在属性体的内部声明。例如:Public Class Loan Private Const MONTHS_IN_YEARS As Integer = 12 'Private years As Integer '/声明字段 years Private m_months As Intege
48、r '/声明字段 m_months Private m_annualInterestRate As Single '/声明字段 m_annualInterestRate ' 声明属性Months Public Property Months() As Integer Get Return m_months End Get Set(ByVal Value As Integer) If Value > 0 Then m_months = Value Else m_months = 0 End If End Set End Property '声明属性years
49、 Public Property Years() As Integer Get Return m_months / MONTHS_IN_YEARS End Get Set(ByVal Value As Integer) If Value > 0 Then m_months = Value * MONTHS_IN_YEARS Else m_months = 0 End If End Set End Property ' /声明属性AnnualInterestRate Public Property AnnualInterestRate() As Single Get Return m_annualInterestRate End Get Set(ByVal Value As Single) m_annualInterestRate = Value End Set End Property. End Class上例中person类声明了一个公共 AnnualInterestRate 属性。AnnualInteres
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025至2030年中国紫檀高级演奏筝市场分析及竞争策略研究报告
- 厂区空压站扩建工程可行性研究报告
- 2025至2030年中国冷冻鲽鱼头行业投资前景及策略咨询研究报告
- 2025年花艺制品项目可行性研究报告
- 2025年智能护理技术应用培训计划
- 新能源项目工程管理工作计划
- 青少年美术兴趣班培训计划
- 小学四年级信息技术辅导员工作计划
- 汽车制造审查补充生产协议
- 新品上市电商平台活动方案设计与执行合同
- 中西文化鉴赏知到智慧树章节测试课后答案2024年秋郑州大学
- 《天津市新型职业农民培育问题研究》
- 车险理赔重大案管理办法
- 牙科市场细分领域分析-洞察分析
- 第16课《经济危机与资本主义国家的应对》中职高一下学期高教版(2023)世界历史全一册
- 货运车队的管理制度模版(2篇)
- 2024年贵州省贵阳市中考生物试卷(附答案)
- 《威尼斯商人》课本剧剧本:一场人性与金钱的较量(6篇)
- 管道、阀门安装方案
- 旅游业游客满意度调查与管理制度
- 2024年公路水运工程试验检测师《道路工程》考试题库大全(含真题等)-中(多选题)
评论
0/150
提交评论