




已阅读5页,还剩25页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
面向对象入门1、 昨日回顾2、 今日展望 面向对象之类与对象 成员变量 成员变量初始值 权限修饰符 构造函数 对象的产生及使用 构造函数之内存分析 方法 This关键字 继承 Super Static Final 多态3、 今日招式3.1、引入类是一组具有共同属性【共同特性】和共同行为的基本单位。用于对对象进行描述。对象是从类中产生出来。在程序中,类是一种数据类型。【引用类型】String、Scanner3.2、关于内存分配之属性方法公司不管午餐,每个员工都需要带饭。我们现在这样想,公司的空间是所有的内存容量,你的办公桌就是计算机中的内存中的一部分(每个员工都有 一份,是在创建对象时分配的)。你把午饭带到了公司,放在了你的办公桌上。“午饭”占据了你的办公桌的一角(占了你自己“对象”的一块内存容量)。这份午 饭只属于你自己,同样别人的也只属于她自己!所以每个员工(对象)都需要一快空间(内存)来存放自己的午餐(属性)。在计算机中也是这样的,每创建一个对 象,就会在内存中从新分配一块内存来放“午餐lunch”这个属性(对象所拥有的所有的属性)。计算机只会为对象的属性分配内存。因为每个对象的都不一样!就像你往公司带的午饭和我往公司带的午饭不一样是一个道理!但方法就不同了。早晨带的饭中 午就凉了,你需要用微波炉来加热。微波炉可不用你带,公司就有(只占公司的一块空间),它放在了午餐桌上。你想想,微波炉属于谁的?它属于所有员工的!因 为每个员工都可以用它。而不必每个员工都带一份。由此可见,每个员工(对象)都有一份午饭(属性),但所有的员工(对象)只一个微波炉(方法)。所有的员 工(对象)都可以通过这个微波炉(方法)来改变自己午餐(属性)的冷热状态。殊途同归!在计算机中,方法只有一份,供所有的对象使用。但是属性每个对象都有一份。3.3、类和对象v 定义类面向对象有两个重要概念:类【class】和对象【Object】。类是一批对象的抽象,对象应该是一个具体的实体,必须属于某一个类。OOP:Oriented Object Programer。面向对象编程定义类的语法:【public修饰符】 class 【类名】零个或多个属性;零个或多个方法;零个或多个构造器;代码块或者静态代码块;.内部类.public class Animal /在new就会先初始化然后再初始化对象中属性值age=20;String name=aaa;/名字float weight;/重量int age=30;float price;/单价void getPrice()System.out.println(name+价钱为:+weight*price);void getPrice1()getPrice();public static void main(String args)Animal an=new Animal();=草鱼;an.weight=2.4f;an.price=8.5f;an.getPrice();System.out.println(an.age);【补充:代码块】结构:/程序代码块先执行代码块程序,后去赋值。【作业】1. 定义一个学生类,有姓名、年龄、学号、性别等信息。同时定义一个方法,用于自我介绍。此时向对象中传递其属性值,打印自我介绍的信息。模板信息为:大家好,我的名字是*,今年*岁。我的性别是*,学号为*。我来自于*,以后请大家多多关照。v 成员变量成员变量在类中表现为属性,属性用于标识该类【表现为静态变量】或者该实例对象【实例变量】所包含的数据。语法格式:【修饰符】 属性类型 属性名 【=默认值】;修饰符:可以省略【default】,或者是public、private、protected、static、final。Static进行修饰的可以被类进行调用,也可以被对象调用,其值可以修改。Final修饰的值不可以修改,只能被对象调用,除非修饰用的是static final。public、private、protected只能选择其中一个。属性类型:包括基本数据类型和引用数据类型【用类进行定义】属性名:建议首字母小写作业:1定义Computer类,特征:cpu,主板,硬盘,内存行为:定义一个名为display()的方法,打印计算机的特征定义TestCompute类,定义main方法:创建Computer对象,调用Computer对象的display()方法2定义Account类定义成员属性money表示账户余额定义方法:查询余额方法.public double getMoney();存款方法:public void save(double addMoney);取款方法:public void withdraw(double takeMoney)定义TestAccount类,定义main方法创建Account对象调用方法save存款,然后调用getMoney显示余额调用方法withdraw,然后调用getMoney显示余额v 成员变量初始值Byte:0Short:0Int:0Long:0Char:0【转换为int】Float、double:0.0Boolean:false所有的引用类型:null 【空指针异常:没有给对象赋值】疑问:局部变量【方法体内定义的变量】能不能不赋值?局部变量如果不赋值,那么再调用的时候会编译错误。局部变量能不能设置权限了?不能。成员变量有两种:一种是被static修饰的静态变量,还一种是没有被static修饰的变量叫实例变量。1. 静态变量可以通过类来调用,也可以通过引用变量来访问。而实例变量只允许引用变量访问。2. 类的静态变量在内存中只存在一个。后面的结果一定会覆盖前面的结果。3. 实例变量在每创建一次实例的时候。虚拟机就会为实例变量分配一次内存。变量命名问题:在同一个作用域内【表现为同一个类或者同一个方法】不能使用两个同名的变量。private static String name;/名字void getPrice(String name)System.out.println(name);sSystem.out.println(+价钱为:+weight*price);在一个方法体内,可以定义和成员变量同名的参数。 v 权限修饰符Public:当前类可以调用,当前包下的类可以调用,不同包中的子类可以调用,不同包中的类可以调用。Default:当前类可以调用,当前包下的类可以调用,不同包中的子类不可以调用,不同包中的类不可以调用。Private:只能被当前类调用Protected:当前类可以调用,当前包下的类可以调用,不同包中的类不可以调用,不同包中的子类可以调用【表现为子类对象去调用,而不是父类的对象调用】【课堂出现问题汇总:】1. import导入不是import导入都是java.util包下,学过的Scanner在其下面是因为JAR包中有一文件夹util刚好有Scanner类。因此如果要导入自己的类文件,需要导入自己类文件所在的路径。2. 如果碰到类名和其它包下的类名一致的情况,怎么办?在程序运行过程中,有一个就近原则,会先找自己本身的类。所以解决方式采用写全名的方法。mon.Client c=new mon.Client();System.out.println();3. 方法调用有问题,例如返回类型为void,有同学使用System.out.println();返回类型为String,有同学直接用一行语句调用? 如果有返回值,才能使用System.out.println。直接调用属性不能单独成为一行代码块,要么是读要么是写。v 构造函数构造函数其实是一个特殊的方法。其语法格式:【修饰符】 类名(参数)零个或者多个代码行注意:构造器不能定义返回值类型声明。也不能使用void定义构造器没有返回值。构造器的方法名字名字必须和类名一致。如果有构造器采用void返回,程序会将其当成一个普通的方法来处理。系统会提供一个默认的构造器,并且该构造器是没有参数的。如果有构造器,默认的构造器就不存在了。如果想有默认的构造器,则重新写一个这样的构造器。构造器在类中可以存在多个。public class Student private String name;private int age;public Student(String name,int age)=name;this.age=age;public Student(String name)=name;public Student()public void display()System.out.println(name+年龄为+age);public static void main(String args)Student student=new Student();/调用空构造方法Student student1=new Student(张三,25);/调用有参数的构造方法/=张三;/student.age=25;student.display();作业:v 隐藏和封装面向对象的三大特征:封装、继承、多态。封装是指对象的状态信息隐藏在对象内部,不允许外部对象直接去访问对象内部信息。而是通过该类所提供的方法实现对内部信息的操作和访问。如果想对类进行一个良好的封装:l 隐藏类的实现细节。l 只能通过方法访问数据l 能进行数据的检查,保证对象信息的完整性。【Person name】l 便于修改,有利于代码的维护性。把该暴漏的暴漏出来,把该隐藏的隐藏起来。另外通过封装实现方法的单一职责。Eclipse:如何对属性进行封装?Source-Setter and Getter将属性修改为private,然后对属性采用set/get方式,这个又称为JavaBean。JavaBean要求属性命名首字母建议小写。基本方法命名都是set/get+【变量名首字母大写】+剩余的变量名但是boolean类型,读的方法是is+【变量名首字母大写】+剩余的变量名疑问:1.为什么不采用对象【.】属性方式,而采用方法调用的方式?因为如果采用对象调用属性的方式的话,那么属性必须要求不能设置为private,而且会提供可读可写。但是如果采用方法的方式的话,则可以控制读写权限。而且采用封装的方式可以控制数据安全,保证数据的正常存储,保证程序的健壮性。2. 构造方式和封装方式区别?1. 构造方式做初始化,封装方式既可以做初始化,也可以做属性的修改。2. 构造方式必须要求参数值进行匹配。而封装方式可以依据具体情形进行数据的填充。v 对象的产生及使用创建对象的根本途径就是构造器。通过关键字new调用某个构造器即可创建对应的对象。对象使用一般用于访问属性(静态属性)或者方法。用【.】符号进行访问。引用类型包括类、接口、数组等。所谓引用类型,就是对一个对象的引用。3.4、内存分析栈内存:存放基本类型的数据,对象的引用【句柄】。堆内存:存放new产生的数据public class Sample private int v1;private int v2=2;private int v3;public Sample()this.v3=3;public static void main(String args) Sample s=new Sample();System.out.println(s.v1);System.out.println(s.v2);System.out.println(s.v3);Java虚拟机分析的步骤:1. 为Sample分配堆内存空间,给所有成员变量都分配内存,并初始化变量值为默认值。2. 显示初始化变量值。V2=2;3. 调用构造函数,将v3的值进行修改4. 将对象的引用赋给变量s作业:public class BirthDay private int year;/年private int month;/月private int day;/日public BirthDay(int year, int month, int day) this.year = year;this.month = month;this.day = day;public int getYear() return year;public void setYear(int year) this.year = year;public int getMonth() return month;public void setMonth(int month) this.month = month;public int getDay() return day;public void setDay(int day) this.day = day;public void display()System.out.println(出生年月为:+year+年+month+月+day);package .test;public class BirthDayTest public void changeValue(int i)i=123456;public void changeValue2(BirthDay day)day=new BirthDay(1999,12,20);public void changeValue3(BirthDay day)day.setDay(10);public static void main(String args) BirthDayTest t=new BirthDayTest();int value=108;BirthDay day1=new BirthDay(2008,8,8);BirthDay day2=new BirthDay(1997,7,1);t.changeValue(200);t.changeValue2(day1);t.changeValue3(day2);System.out.println(value:+value);day1.display();day2.display();1、 初始化工作2、 方法的访问此时将changeValue方法从方法栈中移除。3、 changValue2方法调用此时将changValue2方法移除。4、 changValue3方法调用3.5、方法v 方法声明方法是类或者对象的行为特征的抽象。Java里方法不能独立存在。Java必须通过类或者对象调用,不能独立执行。【修饰符】 返回类型【void、基本数据类型、引用数据类型】 方法名【首字母小写】(参数)方法体;Return 返回类型对应的值;v 方法传递参数实参:调用方法时传递给形参的参数值形参:方法声明时定义的变量方法调用时,基本变量的值不会受影响。引用类型的值会受影响。v 方法调用1. 一个类的内部调用Main方法属性为任何权限,均可以调用。普通方法可以去调用本类的其它方法。包括普通方法可以直接调用静态方法,但是静态方法不可以直接调用普通方法,如果需要调用普通方法,则采用对象调用的方式。2. 不同类之间的调用只需要注意权限的问题。如果能调用的话,一般采用对象调用方法。如果是静态方法的话,直接采用类调用方法。v 方法调用流程当调用方法时,程序的流程是跳转到被调用的方法内部,直到方法返回时,才继续执行剩余的代码。【多线程会分几条路走】v 方法的重载Java语言可以定义多个同名的方法,只要形参的列表不同即可。在此表现为形参的类型和形参的个数。重载包括构造方法的重载和普通方法的重载。1. 形参的个数不同,则允许重载。2. 形参的个数相同,但是形参的类型不一样,则允许重载。3. 形参个数相同,形参类型相同,但返回类型不相同,不允许重载。方法再调用的时候,能够找得到方法。【形参的个数和形参的类型】【作业:利用重载,如果输入的值为int,则实现加法功能。如果输入的值为String,则将两个值合并。】3.6、package和import将类文件放置于包中,有什么用?1. 避免类同名的情况2. 为了import。Import:目的使用不同包中的类。package mon;编译器如何查找指定的包和类?1. ClassPath指定的路径寻找2. 默认会引入java.lang包API:Java的帮助文档左上角:放置的所有包左下角:放置的是所在包下的接口、类、异常等右边:1. 显示该类的继承情况【继承哪个类】 单继承2. 显示该类的实现情况【实现哪一些接口】 多实现3. 显示该类的静态变量【字段摘要】4. 显示该类的构造函数。5. 显示该类的普通函数6. 对所有的方法及属性的详细介绍。【作业:利用API,查找到Math类,从而求取出PI值,并计算出圆面积。同时利用其提供的方法实现两个数的比较、实现次方运算、实现三角函数的值】3.7、继承继承是面向对象三大特征之一。是实现软件复用的重要手段。Java继承是单继承。Java的继承是通过extends实现的。实现继承的类称为子类,被继承的类称为父类【超类、基类】。子类是对父类的泛化。父类到子类是一般到特殊的关系。继承能继承父类的属性以及方法【私有的除外】。如果父类的方法需要被子类继承的话,建议用public、protected。子类在继承父类的时候,构造方法未继承过来。作业:1. 编码实现动物之间的关系。其中动物具有眼睛和皮肤。并均具有行为吃和睡。动物包括兔子(Rabbit)和老虎(Tiger)这些动物的行为吃表现不一样,兔子吃草,老虎吃肉。但是睡的行为一样。通过继承实现上述功能,通过AnimalTest进行测试。2. 建立三个类,居民、成人、官员。其中居民均具有属性姓名、身份证号码、出生日期。而成人继承自居民,另扩展学历以及职业两项。官员则继承自成人,另添加党派、职务两项属性。针对官员和成人两项打印出其拥有的所有属性信息。3. 扩展题目:目前有人、老师、学生三个类。学生和老师继承于人,同时给学生分配属性指定其属于哪个老师。1. 创建Person类public class Person private String name;private int age;public String getName() return name;public Person() super();public Person(String name, int age) super(); = name;this.age = age;public void setName(String name) = name;public int getAge() return age;public void setAge(int age) this.age = age;2. 创建Teacher类public class Teacher extends Person private String course;public String getCourse() return course;public void setCourse(String course) this.course = course;3. 创建Student类public class Student extends Personprivate Teacher teacher;/学生所属老师public void setTeacher(Teacher teacher)this.teacher=teacher;public Teacher getTeacher()return teacher;4. 客户端验证public class Client public static void main(String args) Student s=new Student();s.setName(小明);s.setAge(12);/将该数据对象存储于数据库Teacher t =new Teacher();s.setTeacher(t);/将老师分配给具体的某个学生t.setName(MR M);t.setCourse(Java);/将Teacher数据对象存储于数据库System.out.println(学生姓名:+s.getName();System.out.println(学生年龄:+s.getAge();System.out.println(老师姓名:+s.getTeacher().getName();/根据学生获取老师对象,从而获取老师的信息。System.out.println(老师课程:+s.getTeacher().getCourse();3.8、super关键字super关键字是指向父类对象的默认引用。this关键字是指向本类对象的默认引用。super和this关键字不能出现在static修饰的方法中。super关键字是指向父类的属性或者方法。this关键字是指向本类的属性或者方法。测试:查找value的方式public class BaseClass public String a=BaseClass;public static void main(String args) new SubClass().print(123);/=SubClass sb=new SubClass() sb.print()class SubClass extends BaseClass/public String a=SubClass;public void print(String b)System.out.println(b);System.out.println(this.a);System.out.println(a);System.out.println(super.a);1. 先去方法中查找是否有对应的局部变量值2. 再去本类中查找是否有对应的成员变量值3. 再去父类中查找是否有对应的成员变量值Super构造函数:子类调用父类的构造函数。public Rabbit() super();public Rabbit(String eyes, String skin) super(eyes, skin);public Rabbit(String eyes) super(eyes);super(参数值)子类构造函数调用父类的构造函数:1. 子类对象的构造器会根据实参的列表情况调用父类的构造函数。2. 如果有this的话,直接调用本类的构造函数。3. 子类如果既没有super又没有this,系统将会在执行子类构造器之前,先执行父类的空构造方法。public class Life public Life()System.out.println(Life空构造方法);public static void main(String args) new Chicken();class Animal1 extends Lifepublic Animal1(String name) System.out.println(-Animal1 name-);public Animal1(String name,int age) this(name);System.out.println(-Animal1 name age-);public Animal1()class Chicken extends Animal1public Chicken() super(老母鸡,2);System.out.println(空构造方法);打印结果:Life空构造方法-Animal1 name-Animal1 name age-空构造方法结论:当调用子类构造器来初始化子类对象时,父类构造器总会在子类构造器之前执行,不仅如此,执行父类构造器时,系统会再次往上查找父类构造器。最后找到Object类的构造器。Object类所有类的父类。如果一个类未直接显示指定这个类的直接父类,那么这个类就默认继承Object类。3.9、方法的重写子类在父类的基础上做扩展。甚至可能改造父类的方法或者添加属性。重写要么是直接修改父类的全部实现,要么是利用的实现做扩展。注意:重写必须指定方法名一样,形参列表一样。返回类型要求一样。重载和重写区别:重载在同一个类里面,重写是在子类里面针对父类的方法进行重写。需要保证子类的访问权限必须大于或者等于父类的访问权限,另外父类方法不要设置private。public class Animal private String eyes;private String skin;public String getEyes() return eyes;public void setEyes(String eyes) this.eyes = eyes;public String getSkin() return skin;public void setSkin(String skin) this.skin = skin;public Animal(String eyes) this.eyes = eyes;public Animal(String eyes, String skin) this.eyes = eyes;this.skin = skin;public Animal() protected void eat() public void sleep() System.out.println(动物都睡觉.);public class Rabbit extends Animalprivate String a;public Rabbit() super();public Rabbit(String eyes, String skin) super(eyes, skin);public Rabbit(String eyes, String skin,String a) /super(eyes, skin);this(eyes,skin);this.a=a;public Rabbit(String eyes) super(eyes);/子类重写的方法要求访问权限大于等于父类的访问权限Overridepublic void eat() System.out.println(this.getEyes()+吃草);public void eat(String a) System.out.println(this.getEyes()+吃草);如果父类方法声明为private,那么表示该方法只在当前类能访问,不允许子类的继承,所以在子类上写同样名字的方法不属于重写。【重写的要求是必须能继承过来的方法。】目前使用自己打包的JAR文件,如何进行处理?步骤:1. 选中工程,右击-Export-JAR FILE2. 选中需要导入的工程,右击-Build Path-Add External Archives-选中需要导入的JAR包导入的快捷键:CTRL+SHIFT+O代码提示:ALT+/修改快捷键:Window-Preference3.10、finalfinal关键字可用于修饰类、修饰属性、修饰方法。表示修饰类、方法、变量不可改变。1. final修饰的属性不能修改2. final修饰的方法不能重写3. final修饰的类不能被继承l Final变量Final修饰的变量可以为成员变量、局部变量、形参。public final int a=6;局部变量不能用修饰符【public等】修饰,也不能用static修饰,只能用final。如果成员变量不赋初值,如何处理?只能通过代码块或者构造函数的方式进行初值设置,不能再普通方法中赋值。如果成员变量希望通过类去访问,并且是final类型,如何进行处理?public static final int a=4;public final static int a=4;public static final int a;static a=4;Final修饰形参?public void t(final int b)/内部类时使用l Final修饰基本变量和引用变量Final修饰的基本变量值不允许改变,但是final修饰的引用变量其值可以修改。public class FinalTest public static final int a=5;public static final Person person=new Person();public void t(final int b)/内部类时使用public static void main(String args) final int a;FinalTest f=new FinalTest();/f.t(a);FinalTest.person.setName(J2EE);System.out.println(FinalTest.person.getName();l 谁用final修饰类八大基本类型的包装类【int-Integer、boolean-Boolean】以及String类。l Final修饰方法public final void selfIntroduce()Final修饰的方法不能被重写,但是能被重载。l Final修饰类Final修饰的类不能被继承。Math类是final类型。l Final变量命名 规范建议以后final修饰的变量全部用大写。3.11、多态多态性:发送消息给某个对象,让该对象自行决定响应何种行为。一般来说是通过子类对象赋给超类对象的引用变量来实现动态方法调用。1.向上转型【父类、接口】 变量 =new 【子类、实现类】();子类对象可以直接赋给父类引用对象,无须任何类型的转型。这就称为向上转型。DBTeacher d=new DBTeacher(DB Wang,所属中心1);/数据库老师b.add(Teacher)d);/总部调查数据库老师情况-利用多态 b.add(d);Java编译器允许具有直接或者间接继承关系的类进行类型转换。对于向上转型,可以认为子类对象是一种特殊的父类。2. 向下转型父类转换为子类。向下转型必须满足有继承。父类对象照理来说无法转换为子类对象,因为子类对象拥有的成员父类对象不一定有。因此很可能ClassCastException异常。验证子类能不能转换为父类,用关键字instanceofObject o=true;System.out.println(o instanceof Boolean);向上转型作业:1. 定义一个四边形类,有一个方法draw方法。分别定义三个形状【长方形、正方形、平行四边形】,类里面分别画出这几个图,此时利用多态调用分别调用四个类中draw方法。2.定义一个人People类,共同行为是说话say。中国人说chinese,美国人说english。利用动态方式实现不同国家的say方法。public class People public void say()/* * 利用传入的字符串决定调用哪个类的say方法。 * param str */public void say(String str)if(str.equals(chinese)new Chinese().say();else if(str.equals(american)new American().say();public static void main(String args) new People().say(chinese);利用多态进行处理:public void say(People p)p.say();1. 编译检查2. 运行检查我们利用多态实现了动态绑定,编译时是父类类型,运行时是子类类型。public class A public String show(D obj)return A and D;public String show(A obj)return A and A;class B extends Apublic String show(B obj)return B and B;public String show(A obj)return B and A;class C extends Bclass D extends Bpublic class ATest public static void main(String args) A a1=new A();A a2=new B();B b=new B();C c=new C();D d=new D();System.out.println(a1.show(b);/优先查找A类中是否有参数为B类型,如果没有再查找父类A。System.out.println(a1.show(c);/优先查找A类中是否有参数为C类型,如果没有再查找父类B,如果没有再查找父类A。System.out.println(a1.show(d);/优先查找A类中是否有参数为D类型System.ou
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 中信银行大庆市龙凤区2025秋招半结构化面试15问及话术
- 2025年重庆工业职业技术学院考核招聘30名事业单位工作人员笔试模拟试题及参考答案详解1套
- 广发银行南京市江宁区2025秋招无领导小组面试案例库
- 平安银行无锡市锡山区2025秋招结构化面试15问及话术
- 广发银行洛阳市涧西区2025秋招笔试综合模拟题库及答案
- 广发银行沈阳市大东区2025秋招笔试创新题型专练及答案
- 光大银行上海市浦东新区2025秋招笔试EPI能力测试题专练及答案
- 浦发银行西安市未央区2025秋招半结构化面试题库及参考答案
- 招商银行武汉市青山区2025秋招信息科技岗笔试题及答案
- 招商银行潍坊市诸城市2025秋招笔试创新题型专练及答案
- 2024年急性胰腺炎急诊诊治专家共识解读课件
- (必会)中级《审计理论与实务》近年考试真题题库(300题)
- 食品安全与日常饮食智慧树知到期末考试答案章节答案2024年中国农业大学
- 烘焙与甜点制作
- T-CRHA 028-2023 成人住院患者静脉血栓栓塞症风险评估技术
- 线路光缆施工方案
- 弹塑性力学讲稿课件
- 心怀国防梦争做好少年中小学生国防教育日主题班会课件
- 《运动的快慢》速度、平均速度与瞬时速度课件
- 地基事故案例分析
- 2023淘宝村研究报告
评论
0/150
提交评论