第3章类和对象.ppt

上传人:本田雅阁 文档编号:2566391 上传时间:2019-04-09 格式:PPT 页数:114 大小:447.01KB
返回 下载 相关 举报
第3章类和对象.ppt_第1页
第1页 / 共114页
第3章类和对象.ppt_第2页
第2页 / 共114页
第3章类和对象.ppt_第3页
第3页 / 共114页
第3章类和对象.ppt_第4页
第4页 / 共114页
第3章类和对象.ppt_第5页
第5页 / 共114页
点击查看更多>>
资源描述

《第3章类和对象.ppt》由会员分享,可在线阅读,更多相关《第3章类和对象.ppt(114页珍藏版)》请在三一文库上搜索。

1、第 3 章 类和对象,雷擎 对外经济贸易大学信息学院,content,3.1 面向对象程序设计的概念 3.2 类和对象 3.3 内部类 3.4 对象的初始化和清除 3.5 包 实验:类的定义和使用,3.1 面向对象程序设计的概念,面向对象的程序设计 与结构化程序设计方法相比,更符合人类认识现实世界的思维方式 已成为程序设计的主流方向 涉及的主要概念 抽象 封装 继承 多态,1.抽象,忽略问题中与当前目标无关的方面,以便更充分地注意与当前目标有关的方面 计算机软件开发中所使用的抽象有 数据抽象(数据和操作结合在一起) 过程抽象(功能划分,隐藏具体实现细节),抽象例子1: 学生选课,class

2、Student int stid; String stname; class Course int coid; String coname; int total; int rest; Student students; ,抽象例子1: 学生选课,学生 数据(属性) int stid; String stname; 方法(行为) void registerCourse(); void unRegCourse();,抽象例子2:钟表,数据(属性) int hour; int minute; int second; 方法(行为) void setTime(); void showTime();,抽象

3、例子3:灯,数据(属性) boolean status; 方法(行为) void on(); void off();,2. 封装,是一种信息隐蔽技术 利用抽象数据类型将数据和基于数据的操作封装在一起 用户只能看到对象的封装界面信息,对象的内部细节对用户是隐蔽的 封装的目的在于将对象的使用者和设计者分开,使用者不必知道行为实现的细节,只需使用设计者提供的消息来访问对象,封装的定义,清楚的边界 所有对象的内部信息被限定在这个边界内 接口 对象向外界提供的方法,外界可以通过这些方法与对象进行交互 受保护的内部实现 功能的实现细节,不能从类外访问。,封装例子:钟表,private int hour;

4、private minute; private second; public void setTime(); public showTime();,封装的意义,在面向对象的程序设计中,类封装了数据及对数据的操作,是程序中的最小模块 禁止了外界直接操作类中的数据,模块与模块之间只能通过严格控制的接口进行交互,这使得模块之间的偶合度大大降低 保证了模块具有较好的独立性,程序维护和修改较为容易,3. 继承,是指新的类可以获得已有类(称为超类、基类或父类)的属性和行为,称新类为已有类的派生类(也称为子类) 在继承过程中派生类继承了基类的特性,包括方法和实例变量,派生类也可修改继承的方法或增加新的方法,

5、使之更适合特殊的需要 有助于解决软件的可重用性问题,使程序结构清晰,降低了编码和维护的工作量,4. 多态,一个程序中同名的不同方法共存 主要通过子类对父类方法的覆盖来实现 不同类的对象可以响应同名的消息(方法) ,具体的实现方法却不同 使语言具有灵活、抽象、行为共享、代码共享的优势,很好地解决了应用程序方法同名问题,2.1 面向对象的程序设计方法概述,面向对象程序设计,基本组成单位是类 程序在运行时由类生成对象,对象是面向对象程序的核心 对象之间通过发送消息进行通信,互相协作完成相应功能,对象,现实世界中 万物皆对象 都具有各自的属性,对外界都呈现各自的行为 程序中 一切都是对象 都具有标识

6、(identity), 属性和行为(方法) 通过一个或多个变量来保存其状态 通过方法(method) 实现他的行为,类,将属性及行为相同或相似的对象归为一类 类可以看成是对象的抽象,代表了此类对象所具有的共有属性和行为 在面向对象的程序设计中,每一个对象都属于某个特定的类,Java中类与对象的关系,类是一种复合数据类型,是Java程序的基本组成要素,描述了一类对象的状态和行为,其基本成分包括: 成员变量 成员方法 类相当于程序中数据类型,对象是一个具体的变量。,BACK,3.2 类和对象,3.2.1 类的定义 3.2.2 对象的创建与使用 3.2.3 类成员变量 3.2.4 类成员方法 3.2

7、.5 静态代码块 3.2.6 访问控制,BACK,3.2.1 类的定义,定义形式 public abstract | final class 类名称 extends 父类名称 implements 接口名称列表 变量成员声明及初始化; 方法声明及方法体; ,最简单的类,class Light class Circle ,BACK,3.2.2 对象的创建与使用,变量和对象 变量除了存储基本数据类型的数据,还能存储对象的引用,用来存储对象引用的变量称为引用变量 类的对象也称为类的实例,创建对象,创建对象的两个步骤 声明对象名 分配内存空间,对象的声明,格式 类名称 变量名称 例如Circle是已经

8、声明的类名,则下面语句声明的变量acircle将用于存储该类对象的引用: Circle aCircle; 声明一个引用变量时并没有对象生成,分配内存空间,生成实例的格式: new () 例如: aCircle=new Circle() 其作用是: 在内存中为此对象分配内存空间 返回对象的引用(reference ,相当于对象的存储地址) 变量可以被赋以空值 例如:aCircle=null;,类的使用,格式: 对象名.成员 成员包括成员方法和成员变量 例: int x = Integer.MAX; System.out.println(String s);,BACK,3.2.3 类成员变量,声明

9、格式 public | protected | private static final transient volatile 变量数据类型 变量名1=变量初值, 变量名2=变量初值, ;,类成员变量的分类,类成员变量分为两类: 实例变量 声明时没有static修饰 类变量(静态变量) 声明时用static修饰,实例变量,变量声明中没有static修饰。 变量所指向的对象必须有创建的步骤,如果所属的对象没有被创建,对象就不存在。 所有对象都是实例成员变量。 引用格式: 对象名.实例变量,类的实例变量成员的定义,class Light boolean status=false; /数据类型 变量

10、名初始化值 class Circle int radius = 0; ,类变量(静态变量),声明时需加static修饰符 不管类的对象有多少,类变量只存在一份,在整个类中只有一个值 类初始化的同时就被赋值 适用情况 类中所有对象都相同的属性 经常需要共享的数据 系统中用到的一些常量值 引用格式 .,类变量(静态变量)例子,class Circle static double PI = 3.1415926535 int radius = 0; ,Java的类成员变量定义练习1,用一个类来描述三维空间中的球 类名:Ball 成员变量: 球心坐标 x 球心坐标 y 球心坐标 z 半径 radius

11、颜色color 定义一个测试类BallTester,说明两个Ball类型的变量b1、b2,分别给他们的成员变量赋值,并打印出他们的半径。,Java的类成员变量定义练习2,用一个类来定义银行帐号 类名:BankAccount 成员变量 姓名 (ownerName) 帐号 (accountNumber) 余额 (balance) 利率(rate)/静态变量 定义一个测试类BankAccountTester,说明两个BankAccount类的变量b1、b2,分别给他们的成员变量赋值,分别打印出两个变量的各成员变量,比较实例变量和静态变量的访问,在例1和例2的测试类中: 分别在创建对象之前,使用类名来

12、访问实例变量和静态变量,如BallTester.color等 分别在创建对象之后,使用类名来访问实例变量和静态变量,如BallTester.color等 比较结果,观察现象,BACK,3.2.4 类成员方法,成员方法 定义类的行为 一个对象能够做的事情 我们能够从一个对象取得的信息 类里可以不定义成员方法,也可以定义多个;一旦在类中声明了方法,它就成为了类声明的一部分 成员方法分为实例方法和类方法,方法成员声明,声明格式 public | protected | private static final abstract nativesynchronized 返回类型 方法名(参数列表) th

13、rows exceptionList 方法体 ,类成员方法的分类,类成员方法分为两类: 实例方法 声明时没有static修饰 类方法(静态方法) 声明时用static修饰,实例方法,方法声明中没有static修饰。 实例方法表示特定对象的行为。在使用实例方法之前,必须实例化类,即必须创建引用变量指向的对象,通过对象来引用。如果对象没有被创建,则方法就不能调用。 引用格式: 对象名.实例方法,常用的实例方法,set方法和get方法 set()是给属性赋值的方法,get()是取得属性值的方法。 在java程序中成员属性一般用private限制访问,不允许直接属性直接操作,只能通过set()和get

14、()访问,使得java程序具有很好的封装性和安全性。,例:set方法的定义,public class Circle double r = 0; /成员变量 String color = “white”; /成员变量 public void setR(double num) r = num; /给r赋值为参数num的值 public void setColor(String str) color = str; /给color赋值为参数str的值 ,例:set方法的引用,public class CircleTester public static void main(String str) Ci

15、rcle c1,c2; c1 = new Circle();/创建对象 c1.setR(3); c1.setColor(“red”); c2 = new Circle();/创建对象 c2.setR(5); c1.setColor(“blue”); ,例:get方法的定义,public class Circle private double r = 0; /成员变量 private String color = “white”; /成员变量 public double getR() return r; /返回属性r的值 public String getColor() return color

16、; /返回color的值 ,例:get方法的引用,public class CircleTester public static void main(String str) Circle c1,c2; c1 = new Circle();/创建对象 c1.setR(3); c1.setColor(“red”); Sytem.out.println(c1.getR()+”半径的球颜色是”+c1.getColor(); ,常用的实例方法,toString方法 toString是Object类定义的方法,返回的是“类名hashcode”。可以重新定义,返回自己想要的信息。 toString()方法的

17、几点说明 必须被声明为public 返回类型为String 方法的名称必须为toString,且没有参数,例:toString方法重定义,public class Circle public String toString() return “类名:Ball 球的半径:”+r+” 颜色:”+color ,例:toString方法的引用,public class CircleTester public static void main(String str) Circle c1,c2; System.out.println(c1.toString); System.out.println(c2.

18、toString); ,Java的类成员方法定义练习1,类定义: 类名:Ball 成员变量: 球心坐标 x,y,z 半径 radius 颜色color 成员方法: 设置半径、获取半径值 设置坐标 x,y,z 获取坐标 x,y,z 计算球体积 V 在测试类BallTester中,设置b1的各属性变量,打印出b1的颜色和体积,Java的类成员方法定义练习2,类定义: 类名:BankAccount 成员变量: 姓名 (ownerName) 帐号 (accountNumber) 余额 (balance) 成员方法:设置、获取帐号 getAccountNumber 设置姓名setName 获取姓名get

19、Name 获取余额getbalance 存款 deposit 取款 withdraw 在测试类BankAccountTester中,设置b1的各属性变量,打印出b1的姓名和余额,类方法,也称为静态方法,表示类中对象的共有行为 声明时前面需加static修饰符 不能被声明为抽象的 类方法可以在不建立对象的情况下用类名直接调用,也可用类实例调用,对在成员方法中对类成员的访问,static (静态变量/静态方法) class Test public void print(int x) System.out.println(x); public static void main(String args

20、) int x = 3; print(x); ,D:javac Test.java Test.java:9: non-static method print(int) cannot be referenced from a static context print(x); 1 error,class Test public void print(int x) System.out.println(x); public static void main(String args) int x = 3; Test t = new Test(); t.print(x); ,class Test pub

21、lic static void print(int x) System.out.println(x); public static void main(String args) int x = 3; print(x); ,static方法中仅仅可以调用其他static方法,例:类方法(静态方法)的定义,public class Circle public static double PI = 3.14; public static double getArea(double num) return PI*num*num; ,例:类方法(静态方法)的引用,public class CircleT

22、ester public static void main(String str) Circle c1,c2; . double x1,x2; x1 = Circle.getArea(1.23);/类引用 c1 = new Circle(); x2 = c1.getArea(c1.getR(); /实例引用 ,类方法的应用,将摄氏温度(centigrade)转换成华氏温度(fahrenheit) 转换公式为 fahrenheit = centigrade * 9 / 5 + 32 除了摄氏温度值及公式中需要的常量值,此功能不依赖于具体的类实例的属性值,因此可声明为类方法,例子:类方法的声明,转

23、换方法centigradeToFahrenheit放在类Converter中 public class Converter public static int centigradeToFahrenheit(int cent) return (cent * 9 / 5 + 32); ,Java的类方法练习,在Ball类中定义静态常量PI,定义类方法获取PI的值,BACK,3.2.5 静态代码块,在类中,可以将一块代码声明为静态,这样的程序块叫静态初始化段。 格式 static 语句序列 ,静态代码块说明,静态代码块只能定义在类里面,它独立于任何方法,不能定义在方法里面。 静态代码块里面的变量都是

24、局部变量,只在本块内有效。 静态代码块会在类被加载时自动执行,而无论加载者是JVM还是其他的类。 一个类中允许定义多个静态代码块,执行的顺序根据定义的顺序进行。 静态代码块只能访问类的静态成员,而不允许访问实例成员。,例:静态代码块,public class StaticBlock / 定义一个普通的main()方法 public static void main(String args) System.out.println(“This is main method.“); / 定义一个静态代码块 static System.out.println(“This is static block

25、.“); int stVar = 0; / 这是一个局部变量,只在本块内有效 ,代码执行分析,输出: This is static block This is main method 静态代码块在main()方法之前执行 静态代码块在程序启动时主动执行 与静态方法的区别 静态方法被调用时才执行,例:与静态方法的比较,public class UseStaticBolck public static void main(String args) new StaticBlock(); / 创建一个staticBlock的对象 输出: This is static block,BACK,3.2.6

26、访问控制,访问控制符的作用 说明被声明的内容(类、属性、方法和构造方法)的访问权限。 降低类之间的耦合性 隐藏类的保密信息和功能细节 提高代码的可维护性,访问控制权限的种类,public公共的 protected受保护的 无访问控制符默认 private私有的,类定义中成员的访问控制权限,* 指子类与父类不在同一个包中的情况,public (公共变量/公共方法),容许全权访问,无任何限制(先构造对象,再访问) class A public int x; public void print() class B void test() A a = new A(); a.x = 100; a.pri

27、nt(); ,protected (保护变量/保护方法),容许类本身、子类(有一定限制)以及同一个包中所有类访问(先构造对象,再访问) class A protected int x; protected void print() ,class B void test() A a = new A(); a.x = 100; a.print(); ,无修饰,容许类本身以及同一个包中所有类访问 class A int x; void print() class B void test() A a = new A(); a.x = 100; a.print(); ,private (私有变量/私有方

28、法),D:javac A.java A.java:8: x has private access in A a.x = 100; A.java:9: print() has private access in A a.print(); 2 errors,仅能在其所定义的类中被访问(先构造对象,再访问) class A private int x; private void print() class B void test() A a = new A(); a.x = 100; a.print(); ,BACK,3.3 内部类,内部类也称为嵌入类(nested class),它是定义在其他类的

29、内部。 内部类作为其外部类的一个成员,与其他成员一样,可以直接访问其外部类的数据和方法。 内部类作为一个成员,可以被任意修饰符修饰。,3.3 内部类,3.3.1 内部类的语法规则 3.3.2 局部内部类 3.3.3 匿名内部类 3.3.4 静态内部类,3.3.1 内部类的语法规则,内部类的语法是比较复杂的,根据不同的内部类,语法规则不同,3.3.2 局部内部类,局部(有名)内部类声明格式: class Outer class Inner /内部类属性声明 /内部类方法声明 /内部类构造方法 ,局部内部类的初始化,局部内部类初始化格式: class Outer class Inner Inner

30、 getInner() return new Inner(); ,局部内部类的使用,局部内部类使用格式: class OuterTester Outer outer = new Outer(); Outer.Inner inner; inner = outer.getInner(); inner.方法名; ,例:局部内部类的使用,public class Test3_5 public static void main(String args) Outer outer = new Outer(); outer.print(); Outer.Inner inner = outer.getInner

31、(); inner.print(); ,class Outer private int index = 10; class Inner private int index = 20; void print() int index = 30; System.out.println(this); / the object created from the Inner System.out.println(Outer.this); / the object created from the Outer System.out.println(index); / output is 30 System.

32、out.println(this.index); / output is 20 System.out.println(Outer.this.index); / output is 10 ,void print() Inner inner = new Inner();/ 得到内部类的引用 inner.print(); Inner getInner() return new Inner();/在Outer类内部,直接引用Inner内部类,当然也可以通过外部类引用 ,3.3.3 匿名内部类,匿名内部类的特点: 必须扩展一个基类或实现一个接口,但不能有显示的extends或implements 必须实

33、现父类及接口中的所有抽象方法 总是使用父类的无参构造方法来创建实例 匿名内部类声明和初始化格式: new interfacename(); 或 new superclassname();,例:匿名内部类的使用,abstract class A abstract public void sayHello(); ,class Outer public static void main(String args) new Outer().callInner(new A() public void sayHello() System.out.println(this); / the object cre

34、ated from the anonymous Inner System.out.println(“Hello!“); ); public void callInner(A a) a.sayHello(); ,3.3.4 静态内部类,声明为static,也叫嵌套类 与非静态内部类的区别 目的是把一个修安排类隐藏在另一个类中 没有指向外部类的引用 非静态的内部类不能有静态数据、静态方法和静态内部类,而静 态类中可以有所有的内容 静态内部类实例化时,可以直接实例化内部类,不需要先实例化外部类;而非静态的内部类必须先实例化其外部类,才能实例化本身。,BACK,3.4 对象的初始化和清除,对象初始化

35、系统在生成对象时,会为对象分配内存空间,并自动调用构造方法对实例变量进行初始化 对象回收 对象不再使用时,系统会调用垃圾回收程序将其占用的内存回收,3.4 对象的初始化和清除,3.4.1 构造方法 3.4.2 初始化过程 3.4.3 对象的清除,BACK,3.4.1 构造方法,构造方法 一种和类同名的特殊方法 用来初始化对象 Java中的每个类都有构造方法,用来初始化该类的一个新的对象 没有定义构造方法的类,系统自动提供默认的构造方法,默认构造方法,系统提供的默认构造方法 如果在类的声明中没有声明构造方法,则Java编译器会提供一个默认的构造方法 默认的构造方法没有参数,其方法体为空 使用默认

36、的构造方法初始化对象时,如果在类声明中没有给实例变量赋初值,则对象的属性值为零或空,构造方法的特点,方法名与类名相同 没有返回类型,修饰符void也不能有 通常被声明为公有的(public) 可以有任意多个参数 主要作用是完成对象的初始化工作 不能在程序中显式的调用 在生成一个对象时,系统会自动调用该类的构造方法为新生成的对象初始化,例:无参的构造方法,public class Circle private double r; private String color; . public Circle() r = 1; color = “white”; ,例:带参数的构造方法,public c

37、lass Circle private double r; private String color; . public Circle(double radius) r = radius; color = “white”; public Circle(double radius, String str) r = radius; color = str; ,Java类的构造方法定义练习1,类定义: 类名:Ball 成员变量: 球心坐标 x,y,z 半径 radius 颜色color 成员方法: 构造方法: 无参,有参(球心坐标)(半径) 在测试类BallTester中,声明Ball类型的变量b3

38、和b4,分别使用两个有参构造方法创建对象,并用toString输出信息,Java类的构造方法定义练习2,类定义回顾: 类名:BankAccount 成员变量: 姓名 (ownerName) 帐号 (accountNumber) 余额 (balance) 成员方法: 构造方法: 无参,有参(帐号,姓名,余额) 在测试类BankAccountTester中,声明变量b3,使用有参构造方法创建对象,并用toString输出信息,this关键字的使用,作用 隐含参数指向本对象 显示调用构造方法 注意 用this调用构造方法时,只能用在构造方法中 用this调用构造方法时,必须是构造方法中的第一条语句,

39、this关键字的使用,this调用的格式 this.属性:调用本对象的属性 this.方法:调用本对象的方法 this(参数列表):在构造方法中调用其他的构造方法,例:this调用成员,public class Circle double r = 0; /成员变量 String color = “white”; /成员变量 public String getColor() return this.color; public void setColor(String str) this.color = str; ,例:this调用构造方法,public class Circle private

40、double radius; private String color; . public Circle(double radius) this(radius, “white”); public Circle(double radius, String color) this.radius = radius; this.color = color; ,this使用练习,在Ball和BankAccount的成员方法和构造方法中使用this关键字,替换所有可替换的内容,BACK,3.4.2 初始化过程,初始化(initialization)其实包含两部分 类的初始化 类成员(静态变量) 静态初始化

41、块进行初始化调用 对象的创建 父类的构造函数 自身的构造函数,例:初始化过程,public class test3_8 public static void main(String args) throws ClassNotFoundException System.out.println(“-类初始化-“); Class.forName(“edu.uibe.java.chapter3.Son“); System.out.println(“n“ + “-对象初始化-“); Son son = new Son(); ,class Son extends Father Son() System.o

42、ut.println(“3.自身的构造函数“); static int staticInt = 5; / 如果放在static后面则编译不通过 static System.out.print(“1.静态初始化表达式:staticInt=“ + staticInt + “t“); System.out.println(“静态初始化块“); int instanceInt; / 将会被赋默认值0 System.out.print(“2.初始化表达式:instanceInt=“ + instanceInt + “t“); System.out.println(“初始化块“); ,class Fath

43、er Father() System.out.println(“1.父类的构造函数“); 输出结果为: -类初始化- 1.静态初始化表达式:staticInt=5 静态初始化块 -对象初始化- 1.父类的构造函数 2.初始化表达式:instanceInt=0 初始化块 3.自身的构造函数,BACK,3.4.3 对象的清除,对象使用完之后需要对其进行清除。 对象的清除是指释放对象占用的内存。 在创建对象时,用户必须使用new操作符为对象分配内存。不过,在清除对象时,由系统自动进行内存回收,不需要用户额外处理。 Java语言的内存自动回收称为垃圾回收(Garbage Collection)机制,简

44、称GC。,BACK,3.5 包,包(package)是Java提供的一种区别类的名字空间的机制,是类的组织方式,是一组相关类和接口的集合,它提供了访问权限和命名的管理机制。 使用包的主要原因是确保类名的唯一性。,Java中常用的包,JDK为我们提供了很多标准的 Java类和接口,常用的包有: java.lang java.io java.util java.applet java.awt ,3.5 包,3.5.1 包的定义和使用 3.5.2 程序打包 3.5.3 类路径,3.5.1 包的定义和使用,Java语言提供一种package(包)定义, 用来说明某段程序的路径结构。 格式: packa

45、ge 包名称; 例: package cn.edu.uibe.java public class Something 那么它的类路径应该是 cn/edu/uibe/java/Something.java,导入包,格式 import 包名称; 或 import 类全路径; 例:import cn.edu.uibe.java.*; import cn.edu.uibe.java.Something;,3.5.2 程序打包,在开发过程中,我们虽然可以直接使用Java class文件来运行程序,但这并不是一个好方式。 Java 提供了JAR(Java Archive,Java 归档文件)文件来提供发布

46、和运行。 JAR文件是与平台无关的文件格式,它允许将许多文件组合成一个压缩文件。,jar命令格式,用法: jar ctxuivfm0Me jar-file manifest-file entry-point -C dir files . 选项包括: -c 创建新的归档文件 -t 列出归档目录 -x 解压缩已归档的指定(或所有)文件 -u 更新现有的归档文件 -v 在标准输出中生成详细输出 -f 指定归档文件名 -m 包含指定清单文件中的清单信息 -e 为捆绑到可执行 jar 文件的独立应用程序指定应用程序入口点 -0 仅存储;不使用任何 ZIP 压缩 -M 不创建条目的清单文件 -i 为指定的

47、 jar 文件生成索引信息 -C 更改为指定的目录并包含其中的文件,例:jar归档,例 1:将两个类文件归档到一个名为 classes.jar 的归档文件中: jar cvf classes.jar Foo.class Bar.class 示例 2:使用现有的清单文件“mymanifest“并将 foo/ 目录中的所有文件归档到 “classes.jar“ 中: jar cvfm classes.jar mymanifest -C foo/,3.5.3 类路径,Java虚拟机(JVM)借助类装载器装入应用程序使用的类,具体装入哪些类根据当时的需要决定。 CLASSPATH环境变量告诉类装载器到哪里去寻找第三方提供的类和用户定义的类。 另外,你也可以使用JVM命令行参数-classpath分别为应用程序指定类路径,在-classpath中指定的类路径覆盖CLASSPATH环境变量中指定的值。,例:Windows环境中的设置方法,C: jdkTool -classpath path1;path2. 或 C: set CLASSPATH=path1;path2.,BACK,小结,3.1 面向对象程序设计的概念 3.2 类和对象 3.3 内部类 3.4 对象的初始化和清除 3.5 包,实验:类的定义和使用,实验4:类的定义和使用1 注意1:main是程

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1