<4D F736F F D204A617661B3CCD0F2C9E8BCC6CFB0CCE2D3EBCAB5D1B5BDCCB3CC20B5DA33D5C22E646F63>

Size: px
Start display at page:

Download "<4D F736F F D204A617661B3CCD0F2C9E8BCC6CFB0CCE2D3EBCAB5D1B5BDCCB3CC20B5DA33D5C22E646F63>"

Transcription

1 第 3 章 类与对象 3.1 基本知识提要 知识结构图 类 对象 构造方法 : 构造方法重载类的定义成员方法 : 方法重载成员变量派生子类类的继承方法覆盖 super 的使用对象的声明对象的创建对象的使用 类与对象 this 的使用访问控制修饰符 : 类的访问控制修饰符 成员的访问控制修饰符 非访问控制修饰符 :static final abstract 包 : 包的定义与使用 静态导入 给 Java 应用打包 接口的定义 接口 接口的继承 接口的实现 Java8 对接口的扩展 重点知识整理 1. 类类是 Java 语言程序设计的基本单位,Java 程序是由类构成的, 编写 Java 程序主要就

2 48 Java 程序设计习题与实训教程 是定义各种类 类定义了同一类型对象的结构, 定义一个类相当于定义了一个新的 数据类型, 用来规定具体对象的数据域和操作数据的方法 类定义的语法格式为 : [< 修饰符 >] class < 类名 >[extends< 父类名 >] [implements< 接口名 >] { [ 成员变量声明 ] [ 构造方法定义 ] [ 成员方法定义 ] // 类体 1) 成员变量成员变量用来存储对象的属性信息 成员变量可以是 Java 中的任何一种数据类型, 包括基本类型和引用类型 成员变量的作用范围是在整个类体内都有效, 其有效性与它在类体中定义的先后位置无关, 通常先定义成员变量, 后定义成员方法 对于成员变量如果不赋初始值, 系统会自动赋一个默认值 ( 数值型为 0,boolean 型为 false, 引用型为 null) 2) 构造方法构造方法也称为构造函数, 构造方法是类中的一种特殊的方法, 通过调用构造方法为实例 ( 对象 ) 分配存储空间同时完成实例 ( 对象 ) 的初始化工作 构造方法的特点如下 : 构造方法的方法名与类名相同 构造方法没有返回值, 也不能写 void 构造方法是在创建一个对象时, 使用 new 操作符来调用, 完成对象的初始化工作 3) 成员方法成员方法可以对类中声明的变量进行操作, 即给出算法描述对象所具有的行为 成员方法的定义包括两部分 : 方法头和方法体, 其语法格式如下 : 返回值类型方法名 ( 参数列表 ){ 方法体 方法的返回值类型可以是 Java 中的任何一种数据类型, 描述的是在调用方法之后从方法返回的值, 当一个方法不需要返回数据时, 返回值类型必须为 void 方法的参数可以是任意的 Java 数据类型 4) 方法重载在面向对象程序设计语言中, 有一些方法的含义相同, 但带有不同的参数, 这些方法使用相同的名字, 这就叫方法重载 (overloading) 方法重载的方法参数必须不同, 或者是参数的个数不同, 或者是参数的类型不同 返回值可以相同, 也可以不同 方法重载是实现 多态 的一种方法, 目的是同一功能有不同的实现, 当然构造方法也可以重载 2. 对象当定义一个类时, 就是定义了一个新的引用数据类型, 可以用这个数据类型来声明这种类型的变量, 即实例变量或称为对象变量 1) 对象的声明如同变量的声明一样, 对象被创建和使用前必须进行声明, 其语法格式如下 : 类名对象名 ;

3 第 3 章类与对象 49 在对象声明的时候, 并没有为对象分配存储空间, 只有创建对象时, 才为对象分配存储空间 这时候不能引用此对象 2) 对象的创建创建一个对象有两种方法 : (1) 先声明再创建 对象声明 : 类名对象名 ; 对象创建 : 对象名 =new 类名 (); (2) 一步完成 类名对象名 = new 类名 (); 其中,new 是新建对象操作符 通过 new 调用构造方法实例化一个对象, 返回该对象的一个引用, 即该对象所在的内存地址 3) 对象的使用对象被创建, 即实例化后, 可以通过运算符 "." 访问自己的属性域, 也可以调用创建它的类中的成员方法 其语法格式如下 : 对象. 成员变量 ; 对象. 成员方法 ([ 参数列表 ]); 4)this 的使用 Java 中的 this 关键字可能有些难理解,this 表示当前对象, 也就是调用方法的对象 在 Java 中当前对象是指当前正在调用类中方法的对象 this 有如下作用 : 使用 this 解决局部变量与成员变量同名的问题 使用 this 引用属性及调用方法 在构造方法中, 用 this 调用另一构造方法 在构造方法中, 通过 this 调用另一个构造方法, 其语法格式是 : this( 参数表 ); this( 参数表 ) 语句必须放在构造方法中的第一句 3. 类的继承从已有的类派生出新类, 这叫做继承 由继承而得到的类称为子类或派生类, 被继承的类为父类或超类 父类包括所有直接或间接被继承的类,Java 支持多层继承, 一个父类可以有多个间接子类, 但继承是单继承的, 也就是 Java 中一个类只能有一个直接父类 如果子类和父类在同一个包中, 那么子类继承了其父类中不是 private 的成员, 包括成员变量和成员方法, 继承的成员变量和成员方法的访问权限保持不变 子类和父类不在同一包中时, 父类中的 private 和 default 访问权限的成员不被子类继承, 也就是说, 子类只继承父类中的 public 和 protected 访问权限的成员作为子类的成员

4 50 Java 程序设计习题与实训教程 1) 派生子类 [< 修饰符 >] class < 类名 >[extends< 父类名 >]{ // 类体 这样就在两个类之间建立了继承关系, 子类从它的父类中继承可访问的数据域和方法, 也可以添加新数据域和方法 2) 方法覆盖在继承关系中, 子类会自动继承父类中定义的方法, 但有时在子类中需要对继承的方法进行一些修改, 对父类的方法进行重写, 即子类定义了与父类中同名的方法, 实现对父类方法的覆盖 需要注意的是, 在子类中重写的方法需要和父类被重写的方法具有相同的方法名 参数列表及返回值类型, 并且在子类中重写的方法不能拥有比父类方法更严格的访问权限 3)super 的使用子类声明的成员变量与父类的成员变量的名字相同时, 在子类中, 父类的成员变量将被隐藏 当子类重写父类的方法后, 子类对象将无法访问父类被覆盖的方法, 为了解决这个问题, 在 Java 中提供了 super 关键字, 用于从子类中调用父类的构造方法 成员方法和成员变量 (1) 使用 super 关键字引用父类的成员变量和成员方法, 其语法格式如下 : super. 成员变量 super. 成员方法 ([ 参数 1, 参数 2 ]) (2) 使用 super 关键字调用父类的构造方法, 其语法格式如下 : super([ 参数 1, 参数 2 ]) 注意 : 通过 super 调用父类的构造方法的代码必须位于子类构造方法的第一行, 并且只能出现一次 4. 访问控制修饰符 1) 类的访问控制修饰符类的访问控制修饰符有两种 :public 和默认 2) 类成员的访问控制修饰符 Java 语言为类成员设置了 4 种访问控制修饰符 :public protected private 和默认, 用来修饰成员变量和成员方法 public:public 所修饰的类成员可被所有的类访问,public 指定的访问权限范围最大 protected: 类中由 protected 修饰的成员可以被该类本身 它的子类 ( 包括同一个包中及不同包中的子类 ) 及同一个包中的其他类访问 默认 : 类中的成员为默认的访问权限时, 成员可以被这个类本身和同一包中的类所访问, 即包访问权限 private:private 所修饰的类成员只能被这个类本身访问 5. 非访问控制修饰符 1)static 在一个 Java 类中, 可以使用 static 关键字来修饰成员变量, 该变量被称为静态变量或

5 第 3 章类与对象 51 类变量 类变量将变量值存储于类的公用内存 类变量访问的语法格式为 : 类名. 变量名 static 既可以在声明属性时使用, 也可以在声明方法时使用 有时我们希望在不创建对象的情况下就可以调用某个方法, 换句话说, 也就是使用该方法不必和具体对象绑定在一起, 这时可在定义方法时使用 static 关键字, 这样的方法称为静态方法或类方法 类方法调用的语法格式为 : 类名. 方法名 2)final final 关键字在 Java 中表示的意思是最终, 可用于修饰类 变量和方法, 由 final 修饰的类 变量和方法具有以下特性 : 使用 final 修饰的类不能被继承, 也就是不能有子类 使用 final 修饰的方法不能被子类重写 使用 final 修饰的变量 ( 成员变量和局部变量 ) 是常量, 只能赋值一次, 不可以修改 3)abstract Java 允许定义方法时不写方法体, 不包含方法体的方法称为抽象方法, 抽象方法必须使用 abstract 关键字修饰 当一个类中包含了抽象方法时, 该类必须使用 abstract 关键字来修饰, 使用 abstract 关键字修饰的类称为抽象类 由于抽象类是不完整的 ( 含有抽象方法 ), 所以抽象类不能被实例化, 其作用是提供父类, 其他类可以继承它的公共部分 抽象类的每个具体子类都必须为父类的抽象方法提供具体实现, 否则该子类依然是抽象类 6. 包 Java 中引入了包 (package) 机制, 包实际上就是一个文件夹, 将编写的类 接口分目录存放, 避免了名称冲突 (1) 使用 package 关键字定义包, 其语法格式为 : package pkg1[.pkg2[.pkg3 ]]; 包的声明语句只能位于 Java 源文件的第一行 (2) 使用 import 语句导入了类或类所在的包, 就不必写出类的全名了 import 语句的语法格式为 : 或 import 包名. 子包名. 类名 ; import 包名. 子包名.*; Java 编译器为所有程序自动引入包 java.lang, 因此不必用 import 语句引入 java.lang 包含的类 下面介绍 Java 语言中的常用包 java.lang: 此包为基本包, 包含 Java 语言的核心类, 如 String Math System 和 Inter 等常用类都在此包中, 使用此包中的类时无须使用 import 语句导入包, 系统会自动导入这个包中的所有类

6 52 Java 程序设计习题与实训教程 java.util: 此包为工具包, 一些常用的类库 日期操作等都在此包中, 如果掌握了此包, 则对各种设计思路都可以有很好的理解 java.net: 包含 Java 网络编程相关的类和接口 java.sql: 数据库操作包, 提供了各种数据库操作的类和接口 java.io: 包含了 Java 输入 输出有关的类和接口 java.awt: 包含了用于构建和管理应用程序的图形用户界面的类和接口 javax.swing: 包含了用于建立图形用户界面的类和接口, 此包中的组件相对于 java.awt 包而言是轻量级组件 (3)import 语句不仅可以导入类, 还增加了导入静态方法和静态域的功能 如果一个类中的方法全部是静态方法, 则在导入时可以直接使用 import static 的方式导入, 导入的语法格式为 : import static 包. 类.*; (4) 给 Java 应用打包 在 JDK 中提供了一个 jar 命令, 使用这个命令能够将这些类打包成一个文件, 这个文件的扩展名为.jar, 被称为 jar 文件 (Java Archive File), 它是一种压缩文件, 也被称为 jar 包 当使用 jar 包时, 只需要在 CLASSPATH 环境变量中包含这个 jar 文件的路径 ( 配置 CLASSPATH 环境变量的方法请查阅第 1 章 ),Java 虚拟机就能自动在内存中解压这个 jar 文件, 根据包名所对应的目录结构去寻找所需要的类 jar 命令的主要参数如下 : C 创建新的文档 V 生成详细的输出信息 F 指定文档的文件名 7. 接口接口 (interface) 是 Java 中最重要的概念之一, 它可以被理解为一种特殊的 类, 是由常量和抽象方法组成的 接口不是类, 而是对类的需求的描述, 描述类具有什么功能, 但并不给出每个功能的具体实现 1) 接口的定义 继承与实现接口定义的基本语法格式为 : <public><abstract> interface 接口名 [extends 父类接口列表 ]{ <public><static><final> 变量名 = 初值 ;// 静态常量 <public><abstract> 返回值方法名 ([ 参数表 ])throws[ 异常列表 ]; // 抽象方法 注意 : 关键字 interface 前默认的修饰符为 public abstract, 即便没写也自动设为这种权限 接口通过 extends 继承父接口, 接口是多继承, 因此关键字 extends 后面是接口列表 类通过 implements 关键字实现接口, 一个类可以实现一个或多个接口, 这实际上就摆脱了 Java 的单继承局限 接口中定义的成员变量, 系统自动为这些成员变量增加 public static final 修饰符, 必须在定义时指定默认值 一个类需要实现接口中的全部抽象方法, 否则类为抽象类 接口中的所有方法都是抽象的和公有的, 即是用 public abstract 修饰的, 即便没写也

7 第 3 章类与对象 53 自动地是这个权限 2)Java8 对接口的扩展在 Java8 中对接口进行了改进, 允许在接口中定义默认方法, 默认方法可以提供方法的实现 接口定义的基本语法格式为 : <public><abstract> interface 接口名 [extends 父类接口列表 ]{ <public><static><final> 变量名 = 初值 ;// 静态常量 <public><abstract> 返回值方法名 ([ 参数表 ])throws[ 异常列表 ];// 抽象方法 default 返回值方法名 ([ 参数表 ]){// 默认方法方法体 static 返回值方法名 ([ 参数表 ]){// 类方法方法体 在 Java8 中, 接口里定义的方法只能是抽象方法 类方法或默认方法, 因此如果定义的不是默认方法, 那么系统将自动为普通方法增加 abstract 修饰符 如果定义的是默认方法, 那么必须用 default 修饰符标记, 并提供一个默认实现, 即接口中的普通方法不能有方法实现 ( 方法体 ), 但类方法 默认方法都必须有方法实现 ( 方法体 ) 3.2 典型题解析 例 3.1 下列哪一项不是构造方法的特点?( ) A. 构造方法名必须与类同名 B. 构造方法不具有任何返回类型 C. 任何一个类都含有构造方法 D. 构造方法的访问控制修饰符只能是 public 例题解析 : 根据构造方法的特点可知,A B C 三个选项都是构造方法的特点 答案 :D 例 3.2 在以下什么情况下, 构造方法会被调用?( ) A. 类定义时 B. 创建对象时 C. 调用对象方法时 D. 使用对象的变量时 例题解析 : Java 中通过调用构造方法创建实例 ( 对象 ), 为实例 ( 对象 ) 分配存储空间同时完成 实例 ( 对象 ) 的初始化工作 答案 :B 例 3.3 以下程序的运行结果为 ( ) class Test{ int num; public static void main(string args[]){

8 54 Java 程序设计习题与实训教程 Test x=new Test(); if(x==null) System.out.println("No existing"); else System.out.println(x.num); A.0 B.null C.No existing D. 编译出错例题解析 : 本例中,Test 类中没有定义构造方法, 系统提供无参的构造方法, 通过调用无参的构造方法创建了对象 x, 对象 x 的成员变量没有显性赋值, 因此其值为系统提供的默认值 0 答案 :A 例 3.4 以下程序的运行结果为 ( ) class Test{ int num; public static void main(string args[]){ Test x; if(x==null) System.out.println("No existing"); else System.out.println(x.num); A.0 B.null C.No existing D. 编译出错例题解析 : 本例中, 实例变量 x 仅仅是声明了, 并没有通过 new 调用构造方法创建此实例, 即在内存中并没有为实例 x 分配存储空间 答案 :D 如果将语句 Test x; 改为 Test x=null;, 则输出 : No existing 例 3.5 给定如下代码 : class UserInfo{ String username; int usernumber; public UserInfo(String username){ this.username=username; public UserInfo(String username,int usernumber){ ; this.usernumber=usernumber;

9 第 3 章类与对象 55 空白处应填写的代码应该是 ( ) A.UserInfo(userName,userNumber); B.this(userName,userNumber); C.UserInfo(userName); D.this(userName); 例题解析 : 在本例中 this 的用法是 : 在构造方法中通过 this 调用另一个构造方法, 其语法格式是 this( 参数列表 ); 答案 :D 例 3.6 下述 ( ) 方法是方法重载的正确写法 A.int sumvalue(int a,int b){return a+b; int sumvalue(int a,int b){return a; B.int sumvalue(int a,int b){return a+b; float sumvalue(int a,int b){return (float)(a+b); C.int sumvalue(int a,int b){return a+b; float sumvalue(float a,float b){return a+b; D.int sumvalue(int a,int b){return a+b; int sumvalue(int x,int y){return x+y; 例题解析 : 方法重载是在一个类中或在具有继承关系的类中定义多个同名的方法, 但方法参数必须不同, 或者是参数的个数不同, 或者是参数的类型不同 返回值可以相同, 也可以不同, 即方法重载不是通过返回值来决定是否是方法重载 答案 :C 例 3.7 试分析下列代码的运行结果 class A{ int num=123; void show(){ System.out.println("class A"); class B extends A{ double num=123.45; void show(){ System.out.println("class B"); super.show(); System.out.println(this.num); System.out.println(super.num); class C extends B{

10 56 Java 程序设计习题与实训教程 char num='n'; void show(){ System.out.println("class C"); super.show(); System.out.println(this.num); System.out.println(super.num); public class Test{ public static void main(string args[]){ new C().show(); 例题解析 : 在继承关系中对成员的访问遵循就近原则 在子类中访问属性和方法时将优先查找自己定义的属性和方法, 如果该成员在本类中存在, 则使用本类的 ; 否则, 按照继承层次的顺序到其祖先类查找 this 关键字指当前对象, 即调用方法的对象 super 关键字用于从子类中调用父类的构造方法 成员方法和成员变量 答案 : 程序的运行结果为 : class C class B class A n 例 3.8 下列代码在编译时会发生错误, 下面哪种修改可以更正错误?( ) package c1; public class C1 { public int x; int y; private int z; public int m1(){return y; public int m2(){return z; package c2; import c1.c1; public class C2 { void amethod(){ C1 o=new C1(); System.out.println(o.x); System.out.println(o.y);

11 第 3 章类与对象 57 System.out.println(o.m2()); A. 将类 C2 中的语句 System.out.println(o.y); 改为 System.out.println(o.m1()); B. 将类 C1 中的语句 int y; 改为 private int y; C. 将类 C1 中的语句 int y; 改为 protected int y; D. 将类 C2 中的语句 System.out.println(o.m2()); 改为 System.out.println(o.z); 例题解析 : 本例中, 类 C1 和类 C2 分别位于两个包中, 类 C1 中的成员变量 y 具有默认的访问控制修饰符, 也就是具有包访问权限, 对于在类 C2 中创建的类 C1 的对象 o 来说, 其属性 y 是不可见的, 而在类 C1 中定义的方法 m1() 是公有的 答案 :A 例 3.9 试分析下列代码的运行结果 class A{ int x=1; static int y=2; void mm(){ x=2; static void nn(){ y=3; public class Test{ public static void main(string args[]){ A a=new A(); System.out.println(a.x); System.out.println(a.y); a.mm(); a.nn(); System.out.println(a.x); System.out.println(a.y); A c=new A(); System.out.println(c.x); System.out.println(c.y); 例题解析 : static 修饰的成员称为类成员, 类成员既可通过类名访问也可通过方法名访问 类成员存放在类的公共存储空间, 因此 c.y 的值为 3, 即 a.y 修改后的 y 的值 注意 : 类方法中所访问的成员变量只能是类变量 答案 : 程序的运行结果为 : 1,2 2,3

12 58 Java 程序设计习题与实训教程 1,3 例 3.10 下面 ( ) 是正确的接口 A.interface A{ void show(){ B.abstract interface A { abstract void show(){ C.abstract interface A{ show(); D.interface A extends M1,M2{// 假定接口 M1,M2 已定义 void show(); 例题解析 : 关键字 interface 前默认的修饰符为 public abstract, 即便没写也自动地是这个权限 接口通过 extends 继承父接口, 接口是多继承, 因此关键字 extends 后面是接口列表 接口中的所有方法都是抽象的和公有的, 即是用 public abstract 修饰的, 即便没写也自动地是这个权限 答案 :D 例 3.11 下面关于方法覆盖的描述不正确的是 ( ) A. 覆盖的方法一定不能是 private 修饰的 B. 要求覆盖和被覆盖的方法必须具有相同的访问权限 C. 覆盖的方法不能比被覆盖的方法抛出更多的异常 D. 要求覆盖和被覆盖的方法有相同的名字 参数列表以及返回值例题解析 : 本题考查的是对方法覆盖的理解 覆盖是指派生类方法覆盖父类的方法, 在使用覆盖时需要注意以下几点 (1) 派生类中的覆盖方法必须要和父类中被覆盖方法有相同的返回值类型 函数名和参数 (2) 父类中被覆盖的方法不能为 private 修饰符修饰, 否则, 其子类只是定义了另外一个方法, 并没有实现对父类中方法的覆盖 (3) 子类方法不能缩小父类方法的访问权限 (4) 子类方法不能抛出比父类方法更多的异常 (5) 子类可以覆盖父类的静态方法, 但父类的静态方法不能被子类覆盖为非静态的方法 ; 反之亦然 答案 :D 例 3.12 构造方法 成员变量初始化及静态成员变量初始化三者的先后顺序是

13 第 3 章类与对象 59 例题解析 : 当类第一次被加载时, 首先静态变量会初始化, 接着编译器会把实例变量初始化为默认值, 然后执行构造方法 Java 程序的初始化一般遵循以下原则 : 首先, 静态变量优于非静态变量初始化, 其中, 静态变量只初始化一次, 而非静态变量可能会初始化多次 ; 其次, 父类优先于子类进行初始化 ; 最后, 按照成员变量的定义顺序对成员变量进行初始化, 在构造方法调用之前被初始化 答案 : 静态成员变量初始化 成员变量初始化 构造方法 例 3.13 试分析下列代码的运行结果 1.class B extends A{ 2. int k=10; 3. public void sum(int x){ 4. super.sum(x); 5. System.out.println(k); public class A { 9. int k=5; 10. public void sum(int x){ 11. k=x; public static void main(string args[]){ 14. new B().sum(1); 例题解析 : 本题考查的是子类中含有覆盖方法的调用情况 子类对象调用方法时, 首先调用子类中同名且函数参数形式 ( 参数个数 类型和顺序 ) 一致的方法, 然后才调用父类中定义的匹配的方法 本程序运行时, 创建了 B 类的对象调用 sum(1) 方法, 此时程序的执行流程是调用 B 类的 sum() 方法, 因此输出的 k 值是 B 类对象的成员变量 k 的值 答案 : 程序的运行结果为 测试习题与参考答案 测试习题 一 填空题 1. 定义在类中的变量被称为, 定义在方法中的变量被称为 2. 使用对象前需要 和 两个步骤

14 60 Java 程序设计习题与实训教程 3. 是一个特殊的方法, 用于初始化一个类的对象 4. 声明为 static 的方法不能访问 成员 5. 如果需要访问私有数据成员, 则通过 和 方法实现 6.Java 中使用关键字 来创建类的实例对象 7. 被 static 关键字修饰的成员变量被称为, 它可以被该类所有的实例对象 共享 8. 一个类如果实现一个接口, 那么它需要实现接口中定义的全部方法, 否则该类就 必须定义成 9.Java 通过关键字 可以防止类被继承 10. 是 Java 中实现多重继承的唯一途径 11. 接口中定义的数据成员的默认修饰符是, 接口中定义的成员方法默认修 饰符是 12. 引用本类中的数据成员和成员方法时, 使用 关键字 13. 在 Java 语言中, 要想将一个已编译的类打包成 jar 文件, 可以使用的命令 是 14.Java 语言提供了两种实现多态的机制, 分别是 和 15. 在父类中使用 public 定义的方法, 则子类重写该方法的访问控制权限必须 是 16.Java 语言中子类继承父类时使用 关键字, 而实现接口时采用 关 键字 二 选择题 1. 下列说法中不正确的是 ( ) A. 局部变量在使用之前无须初始化, 因为系统会为该变量提供默认值 B. 类成员变量由系统自动进行初始化 C. 方法的参数的作用域就是所在的方法 D. 语句块中定义的变量, 当语句块执行完时, 该变量就消亡了 2. 下列关于构造方法的描述中错误的是 ( ) A.Java 语言规定构造方法没有返回值, 但不用 void 声明 B.Java 语言规定构造方法名与类名必须相同 C.Java 语言规定构造方法不可以重载 D.Java 语言规定构造方法需要使用 new 关键字调用 3. 下列 ( ) 不是 Java 的 new 操作符的作用 A. 为对象分配内存空间 B. 调用类的构造方法创建对象 C. 返回对象的引用 D. 产生一个新的类型 4. 访问控制修饰符作用范围由大到小是 ( ) A.private-protected-default-public B.public-protected-default-private C.private-default-protected-public D.public-default-protected-private 5. 下面关于关键字 abstract 的描述错误的是 ( ) A. 关键字 abstract 可以修饰类或方法

15 第 3 章类与对象 61 B.final 类的方法都不能是 abstract, 因为 final 类不能有子类 C.abstract 类不能被实例化 D.abstract 类的子类必须实现其超类的所有 abstract 方法 6. 在声明类时, 声明一个类不能再被继承的关键字是 ( ) A.unextends B.abstract C.final D.static 7. 编译定义了 2 个类和 5 个方法的 Java 源文件后, 会产生 ( ) 字节码文件 A.2 B.3 C.1 D.5 8. 关键字 super 的作用是 ( ) A. 访问父类被隐藏的数据成员 B. 调用父类中被重载的方法 C. 调用父类的构造方法 D. 以上选项均是 9. 下列说法不正确的是 ( ) A.Java 语言中允许一个类实现多个接口 B.Java 语言中允许一个类继承多个类 C.Java 语言中允许一个类同时继承一个类并实现多个接口 D.Java 语言中允许一个接口继承多个接口 10. 类中的方法被 ( ) 修饰符修饰时, 该方法只能在本类被使用 A.public B.protected C.private D.default 11. 接口的抽象方法都具有 ( ) 修饰的特性 A.private,final B.public,abstract C.public,final D.protected,abstract 12. 下列关于方法重载正确的描述是 ( ) A. 重载方法的返回值类型必须不同 B. 重载方法的参数形式不同, 即 : 或者是参数的个数不同, 或者是参数的类型 不同 C. 重载方法的参数名称必须不同 D. 重载方法的访问修饰符不同 13. 以下关于类的描述正确的是 ( ) A. 只要没有定义不带参数的构造方法,JVM 都会为类生成一个默认的构造方法 B. 局部变量的作用范围仅仅在定义它的方法内, 或者是定义它的语句块中 C. 使用其他类的方法仅仅需要引用方法的名字即可 D. 在类中定义的变量称为类的成员变量, 在其他类中可以直接使用 14. 下列关于继承的描述正确的是 ( ) A. 子类能继承父类的非私有方法和属性 B. 子类能继承父类所有的方法和属性 C. 子类只能继承父类公有方法和属性 D. 子类不能继承父类的 protected 方法和属性 15. 下列说法中正确的是 ( ) A. 子类不能定义和父类同名同参数的方法 B. 子类只能继承父类的方法, 而不能重载

16 62 Java 程序设计习题与实训教程 C. 重载就是一个类中有多个同名但有不同形参 ( 参数类型或参数个数不同 ) 的方法 D. 子类只能覆盖父类的方法, 而不能重载父类的方法 16. 以下程序段的输出结果为 ( ) interface B{ int k=1; public class A implements B{ public static void main(string args[]){ int i; A a=new A(); i=a.k; System.out.println("i="+i); A.i=0 B. 程序有编译错误 C.i=1 D.i=null 17. 以下关于被访问控制符 protected 修饰的成员变量的描述正确的是 ( ) A. 只能被该类自身所访问 B. 可以被该类本身和该类的所有子类所访问 C. 可以被 3 种类所引用 : 该类自身 与它在同一个包中的其他类 在其他包中的该类的子类 D. 只能被同一包中的类访问 18. 下列程序的输出结果是 ( ) class B { int k; public B(){ public B(int k){ this.k=k; public class A extends B{ public A(){ k=k+1; public static void main(string args[]){ A a=new A(); System.out.println(a.k); A. 输出结果为 1 B. 输出结果为 0 C. 输出结果为 2 D. 编译出错

17 第 3 章类与对象 下列关于类方法的描述正确的是 ( ) A. 在类方法中可用 this 来调用本类的类方法 B. 在类方法中可直接调用本类的类方法 C. 在类方法中只能调用本类的类方法 D. 在类方法中绝对不能调用实例方法 20. 下列关于实例方法的描述正确的是 ( ) A. 实例方法可直接调用超类的类方法 B. 实例方法可直接调用超类的实例方法 C. 实例方法可直接调用其他类的实例方法 D. 实例方法可直接调用本类的类方法 21. 已定义接口 X 和 Y, 下列语句错误的是 ( ) A.public interface Z extends X,Y{void amethod(); B.class Z implements X,Y{ C.interface Z extends X,Y {void amethod(){ ; D.interface Z extends X{void amethod(); 22. 已定义接口 B 和 C, 以下语句正确的是 ( ) A.interface A extends B,C B.interface A implements B,C C.class A extends B,C D.class A implements B,implements B 23. 下列代码的运行结果是 ( ) public class A{ public int value(){ static int i=0; i++; return i; public static void main(string args[]){ A t=new A(); System.out.println(t.value()); A. 输出结果为 1 B. 输出结果为 0 C. 输出结果为 2 D. 编译出错 24. 类 A 是类 B 的子类, 类 B 是类 C 的子类,3 个类都定义了方法 method, 下列语句 ( ) 可以在类 A 的方法中调用类 C 的 method 方法 A.method(); B.super.method(); C.new C().method(); D.new A().method(); 25. 子类调用父类的构造方法时,super( 参数列表 ) 语句应该位于 ( )

18 64 Java 程序设计习题与实训教程 A. 子类构造方法中的第一句 B. 子类中任意位置 C. 子类类体的第一句 D. 子类构造方法中的任意位置 26. 定义 Student 类的语句如下 : class Student{ String name,department; int score; public Student(String name){ this.name=name; public Student(String name,string department){ this(name); this.department=department; public Student(String name,string department,int score){ ;// 调用第二个构造方法 this.score=score; 要在第三个构造方法中调用第二个构造方法, 空白处的代码应该是 ( ) A.Student(name,department); B.this(String name,string department); C.this(name,department); D.Student(String name,string department); 27. 关于 final 关键字的说法错误的是 ( ) A. 修饰的成员变量为常量, 它只能被赋值一次, 其值不能修改, 并且在声明时必须初始化 B. 如果修饰类, 则该类不能被继承 C. 如果修饰方法, 则该方法不能被其子类覆盖 D. 修饰局部变量时, 其值可多次修改 28. 下列关于 package 和 import 语句的描述中, 错误的是 ( ) A. 一个源文件中 package 语句可以出现一次或多次 B. 一个源文件中 import 语句可以出现一次 C. 一个源文件中 import 语句必须出现在第一行 ( 不包括注释 ) D. 一个源文件中 package 语句必须出现在第一行 ( 不包括注释 ) 29.Java 语言接口的修饰符可以为 ( ) A.static B.protected C.final D.abstract 30. 关于下面的代码, 以下结论 ( ) 是正确的 public class Test { public Test(){ System.out.print(" 构造方法 "); public void Test(){

19 第 3 章类与对象 65 System.out.print(" 成员方法 "); public static void main(string args[]){ Test t=new Test(); t.test(); A. 程序无法通过编译 B. 程序可以通过编译并正常运行, 运行结果为输出 : 构造方法成员方法 C. 程序通过编译但运行出错 D. 程序可以通过编译并正常运行, 运行结果为输出 : 构造方法三 判断题 1. 一个类中定义了有参的构造方法, 则 Java 系统就不提供默认的构造方法 ( ) 2. 方法覆盖要求覆盖的方法和被覆盖的方法必须具有相同的访问权限 ( ) 3. 子类可以继承父类的所有成员变量和成员方法 ( ) 4.Java 类中不能定义同名的两个成员方法 ( ) 5.final 修饰的类可以被继承 ( ) 6. 每个类都只能有一个构造方法 ( ) 7.static 修饰的类变量为类的所有对象共享 ( ) 8.static 修饰的类方法既可被对象调用, 也可通过类名调用 ( ) 9.protected 修饰的成员可以被 3 种类所引用, 该类本身 与它在同一个包中的其他类 在其他包中该类的子类 ( ) 10. 成员变量无须初始化, 可由系统自动进行初始化 ( ) 11. 关键字 super 在子类对象中指代其父类对象的引用 ( ) 12. 在 Java 中关键字 this 表示当前对象, 也就是正在调用类中方法的对象 ( ) 13. 类由两部分组成 : 一部分是变量的定义, 一部分是方法的定义 ( ) 14. 在定义类时, 类的构造方法 成员变量和成员方法的定义顺序在语法上有严格的限制 ( ) 15. 类的实例对象的生命周期包括对象的创建 使用 废弃 垃圾回收 ( ) 16.package 语句只能位于 Java 源程序除注释之外的第一行位置 ( ) 17. 接口可继承多个接口, 创建一个类也可以实现多个接口 ( ) 四 程序阅读题 1. 下面程序通过在类中定义方法来实现对私有变量的操作, 请将程序补充完整 class A{ int a; public int b; private int c; void setc(int i) { 1 ;

20 66 Java 程序设计习题与实训教程 int getc() { 2 ; class Test { public static void main(string args[]) { 3 object = new A(); object.a = 10; object.b = 20; object. 4 (100); System.out.println("a,b,and c: " + object.a + " " +object.b + " " + object. 5 ); 2. 下列哪行代码出现了错误? 为什么? 1.public class Test { 2. public static void main(string args[]){ 3. A a=new A(); 4. a.print(); class A{ 8. String s; 9. A(String s){ 10. this.s=s; public void print(){ 13. System.out.println(s); 下列哪行代码出现了错误? 为什么? 1.public class Test { 2. public static void main(string args[]){ 3. A obj=new A(); 4. System.out.println(obj.i); 5. System.out.println(obj.s); 6. obj.amethod(); 7. obj.bmethod(); 8. System.out.println(A.i); 9. System.out.println(A.s); 10. A.aMethod(); 11. A.bMethod();

21 第 3 章类与对象 class A{ 15. int i; 16. static String s; 17. void amethod(){ static void bmethod(){ 下列哪行代码出现了错误? 为什么? 1.public class Test { 2. public static void main(string args[]){ 3. method1(); public void method1(){ 6. method2(); public static void method2(){ 9. System.out.println(" 圆的半径是多少 :"+c.getradius()); Circle c=new Circle(5); class Circle{ 14. private double radius; 15. public void setradius(double radius){ 16. this.radius=radius; public double getradius(){ 19. return radius; public Circle(double radius){ 22. this.radius=radius; 下列代码实现方法覆盖, 请将程序补充完整 public class Circle { private double radius; public Circle(double radius){ this.radius=radius; public double getarea(){ return 3.14*radius*radius;

22 68 Java 程序设计习题与实训教程 public double getradius(){ return radius; class Cylinder extends Circle{ private double length; public Cylinder(double radius,double length){ 1 ; // 调用父类的构造方法 this.length=length; 2 double getarea(){// 覆盖父类的方法 getarea return length*2*3.14* 3 ;// 使用父类的成员变量 radius 6. 下列代码中, 类 A 和类 B 在不同的包中 如果空白处采用默认的访问权限, 类 B 能正常编译吗? 如果空白处采用 protected 访问权限, 类 B 正常编译吗? package p1; public class A{ 1 int x; 2 void method1(){ package p2; import p1.a; public class B extends A{ public void method2(){ System.out.println(x); method1(); 7. 阅读下面的程序, 分析代码是否能通过编译, 如果能通过编译, 请写出程序运行结果 如果不能通过编译, 请说明原因 interface Animal{ void breathe(); void run(); void eat(); class Dog implements Animal{ public void breathe(){ System.out.println("The dog is breathing!"); public void eat(){

23 第 3 章类与对象 69 System.out.println("The dog is eating!"); class Test{ public static void main(string args[]){ Dog dog=new Dog(); dog.breathe(); dog.eat(); 五 编程题 1. 请按照以下要求设计一个学生类 Student, 并进行测试 要求如下 : (1)Student 类中包含两个 private 属性, 其中 name 表示姓名,score 表示成绩 (2) 定义两个 set 方法分别用来设置姓名和成绩的属性值, 两个 get 方法分别用来获取姓名和成绩的属性值 (3) 定义一个无参的构造方法和一个有两个参数的构造方法 ( 两个参数分别用来为姓名和成绩属性赋值 ) (4) 在测试类 Test 中创建两个 Student 对象 : 一个使用无参的构造方法创建, 另一个使用有参的构造方法创建, 输出两个对象的属性信息 2. 请按以下要求设计两个类 Circle 和 Cylinder, 并进行测试 要求如下 : (1) 根据下面的要求设计类 Circle Circle 类的成员变量 :radius 半径 Circle 类的方法成员如下所示 : Circle() 无参的构造方法 Circle(double radius) 有参的构造方法 double getradius() 获得圆的半径值 double getperimeter() 获得圆的周长 double getarea() 获得圆的面积 void disp() 输出圆的信息, 包括其半径 周长和面积 (2) 创建类 Cylinder 继承类 Circle, 要求如下 : Cylinder 类的成员变量 heitht 表示圆柱的高 Circle 类的方法成员如下所示 : Cylinder() 无参的构造方法 Cylinder (double radius,double height) 有参的构造方法 double getheight() 获得圆柱的高 double getarea() 获得圆柱的面积 double getvol() 获得圆柱的体积 void disp() 输出圆柱的信息, 包括其高 面积和体积 (3) 在测试类 Test 中创建一个 Circle 对象, 输出该对象的信息 ; 创建一个 Cylinder 对象, 输出该对象的信息

24 70 Java 程序设计习题与实训教程 3. 请按以下要求设计一个接口 Shape 及其两个实现类 Circle 和 Square, 并进行测试 要求如下 : (1)Shape 接口中有一个抽象方法 getarea(), 方法返回一个 double 类型的结果 (2)Circle 类中定义了一个成员变量 radius, 表示半径, 实现了接口 Shape 的 getarea() 抽象方法, 求圆的面积并返回 ;Square 类中定义了一个成员变量 height, 表示边长, 实现了接口 Shape 的 getarea() 抽象方法, 求正方形的面积并返回 (3) 在测试类 Test 中创建 Circle 和 Square 类的对象, 计算边长为 5 的正方形面积和半径为 5 的圆的面积 4. 请按以下要求设计一个抽象父类 Person 和它的两个子类 Student 类和 Worker 类, 并进行测试 要求如下 : 父类有学生和工人两个子类, 在父类中定义其共同属性, 子类学生和工人都可以说话, 但学生和工人说话的内容是不一样的, 具体内容由学生或工人决定, 请利用抽象类来完成这种场景 参考答案 一 填空题 1. 成员变量 局部变量 2. 声明对象 创建对象 3. 构造方法 4. 非静态 5.setter getter 6.new 7. 类变量 8. 抽象类 9.final 10. 接口 11.final public static public abstract 12.this 13.jar-cvf 14. 重载 覆盖 15.public 16.extends implements 二 选择题 1.A 2.C 3.D 4.B 5.D 6.D 7.A 8.D 9.B 10.A 11.B 12.B 13.B 14.A 15.C 16.C 17.C 18.A 19.B 20.D 21.C 22.A 23.D 24.C 25.A 26.C 27.D 28.D 29.D 30.B 三 判断题 四 程序阅读题 1.1c=i 2reurn c 3 A 4setc 5getc() 2. 第 3 行代码出现了错误, 因为类中声明了一个有参的构造方法, 则系统不会提供 默认的构造方法 3. 第 8 行和第 9 行代码出现了错误, 因为它们不是类成员, 不能用类名来引用 4. 第 4 行和第 10 行代码出现了错误 第 4 行的代码错误在于 method1 方法不是静态 方法, 不能在静态方法中调用实例方法 ; 第 10 行的代码错误在于可以在静态方法中调用实 例方法, 但此时必须在静态方法中创建实例对象, 通过实例对象调用实例方法 5.1super(radius) 2public 3 getradius() 6. 类 A 和类 B 在不同的包中 如果空白处采用默认的访问权限, 则类 B 能不正常编 译 ; 如果空白处采用 protected 访问权限, 则类 B 能正常编译 7. 不能通过编译 因为当创建类实现接口时必须实现接口中的全部抽象方法, 否则

25 第 3 章类与对象 71 该类是抽象类, 本程序中的 Dog 类不是抽象类, 但没有实现接口中的全部抽象方法, 因此不能通过编译 五 编程题 1. 参考源代码如下 : class Student{ private String name; private double score; public void setname(string name){ this.name=name; public void setscore(double score){ this.score=score; public String getname(){ return name; public double getscore(){ return score; Student(){ Student(String name,double score){ this.name=name; this.score=score; public class Test{ public static void main(string args[]){ Student z=new Student(); z.setname(" 李丽 "); z.setscore(95); System.out.println(" 学生姓名是 :"+z.getname()+", 学生的成绩是 : "+z.getscore()); Student p=new Student(" 李军 ",77); System.out.println(" 学生姓名是 :"+p.getname()+", 学生的成绩是 : "+p.getscore()); 2. 参考源代码如下 : class Circle{ private double radius; Circle(){ radius=0;

26 72 Java 程序设计习题与实训教程 Circle(double radius){ this.radius=radius; double getradius(){ return radius; double getperimeter(){ return 2*3.14*radius; double getarea(){ return 3.14*radius*radius; void disp(){ System.out.println(" 圆的半径 周长 面积分别是 :"+getradius()+" "+getperimeter()+" "+getarea()); class Cylinder extends Circle{ private double height; Cylinder(){ super(); height=0; Cylinder(double radius,double height){ super(radius); this.height=height; double getheight(){ return height; double getarea(){ return getperimeter()*height; double getvol(){ return super.getarea()*height; void disp(){ System.out.println(" 圆柱的高 半径 表面积和体积分别是 :"+getheight()+" "+getradius()+" "+getarea()+" "+getvol()); public class Test{ public static void main(string args[]){ Circle c=new Circle(5); c.disp();

27 第 3 章类与对象 73 Cylinder cy=new Cylinder(5,10); cy.disp(); 3. 参考源代码如下 : interface Shape{ double getarea(); class Circle implements Shape{ private double radius; Circle(double radius){ this.radius=radius; public double getarea(){ return 3.14*radius*radius; class Square implements Shape{ private double height; Square(double height){ this.height=height; public double getarea(){ return height*height; public class Test{ public static void main(string args[]){ Circle c=new Circle(5); System.out.println(" 圆的面积是 :"+c.getarea()); Square s=new Square(5); System.out.println(" 正方形的面积是 :"+s.getarea()); 4. 参考源代码如下 : abstract class Person{ private String name; private int age; public Person(String name,int age){ this.name=name; this.age=age; public String getname(){ return name;

28 74 Java 程序设计习题与实训教程 public int getage(){ return age; public void say(){ System.out.println(this.getContent()); public abstract String getcontent(); class Student extends Person{ private float score; public Student(String name,int age,float score){ super(name,age); this.score=score; public String getcontent(){ return " 学生信息 :"+super.getname()+" 这学期的成绩是 :"+this.score; class Worker extends Person{ private double salary; public Worker(String name,int age,double salary){ super(name,age); this.salary=salary; public String getcontent(){ return " 工人信息 :"+super.getname()+" 现在的工资是 :"+this.salary; public class Test{ public static void main(string args[]){ Person p=new Student("Lili",18,560f); Person q=new Worker(" 张三 ",40,5600f); p.say(); q.say(); 3.4 实训 3 面向对象编程练习 类 实训目的 1. 通过编程和上机实验理解 Java 语言是如何体现面向对象编程的基本思想, 以及如何创建类和对象, 掌握成员变量和成员方法的特性

29 第 3 章类与对象 理解构造方法的作用, 掌握构造方法的设计 3. 理解方法重载的意义, 掌握构造方法重载和方法重载的设计 实训内容 1. 编写 Book 类, 在该类中定义了 3 个 private 属性, 即 title 表示书名 author 表示作者 price 表示价格 ;3 个 set 方法分别用来设置书名 作者和价格的值,3 个 get 方法分别用来获取书名 作者和价格 编写测试类 Test, 用来测试 Book 类, 创建 Book 对象并输出其属性 2. 对下面的程序写出输出结果, 并能说明方法重载的意义及语法要求 class SumClass{ int sum(int a,int b){ return a+b; double sum(double a,double b){ return a+b; int sum(int a,int b,int c){ return a+b+c; double sum(double a,double b,double c){ return a+b+c; class Test{ public static void main(string args[]){ System.out.println(new SumClass().sum(98,99)); System.out.println(new SumClass().sum(77.5,89.2)); System.out.println(new SumClass().sum(98,99,88)); System.out.println(new SumClass().sum(66.5,89.9,67.8)); 参考源代码 1. 参考源代码如下 : class Book{ private String title; private String author; private double price; public void settitle(string title){ this.title=title; public void setauthor(string author){ this.author=author; public void setprice(double price){

30 76 Java 程序设计习题与实训教程 this.price=price; public String gettitle(){ return title; public String getauthor(){ return author; public double getprice(){ return price; public class Test{ public static void main(string args[]){ Book book=new Book(); book.setauthor(" 朱自清 "); book.settitle(" 荷塘月色 "); book.setprice(28.5); System.out.println(" 书名是 :"+book.gettitle()+", 书的作者是 : "+book.getauthor()+", 价格是 :"+book.getprice()); 2. 答案略, 参考 节的介绍 对象的创建与使用 实训目的 1. 理解声明对象与创建对象的区别 2. 学会使用构造方法创建对象, 掌握对象的使用 3. 掌握 this 关键字的使用 实训内容 1. 定义一个 Person 类, 可以在应用程序中使用该类 Person 类的成员属性 ( 变量 ) 如下 : 姓名 :name, 字符串类型 :String; 性别 :sex, 字符型 :char; 年龄 :age, 整型 :int 3 个构造函数 : public Person(String name) // 设置姓名 public Person(String name,char sex) public Person(String name,char sex,int age) 一个成员方法 :

31 第 3 章类与对象 77 public String tostring() // 获得姓名 性别和年龄 利用定义的 Person 类, 请实例化对象, 输出下面结果 : 姓名 : 张三性别 : 男年龄 :21 把下面程序补充完整, 调试通过并写出结果 public class Person { private String name; private char sex; private int age; public Person(String name){ this.name =name; public Person(String name,char sex){ 1 ;// 调用本类的构造函数 Person(String name) this.sex = sex; public Person(String name,char sex,int age){ 2 ;// 调用本类的构造函数 Person(String name,char sex) this.age =age; public String tostring(){ return 3 ; public static void main(string[] args){ Person p= 4 Person("lili",' 女 ',21); System.out.println(p. 5 ); 2. 设计一个名为 Account 的类模拟账户, 它包括 : int 型数据域 id 表示账号 ( 默认值为 0); double 型数据域 balance 表示账户余额 ( 默认值为 0); double 型数据域 interestrate 表示存储年利率 ( 默认值为 0); Date 型数据域 datecreated 存储账户开户的日期 ; 用无参构造方法创建一个默认账户 ; id,balance,datecreated 和 interestrate 的 getter 和 setter 方法 ; 方法 withdraw() 用于从账户取钱操作 ; 方法 deposit() 用于向账户存钱操作 编写一个测试程序, 创建一个账号为 余额为 年利率为 3.31% 的 Account 对象 使用 withdraw() 方法提款 2000 元, 使用 deposit 方法存款 3000 元, 输出该账户的账户名 开户日期 利率及余额 参考源代码 1.1this(name) 2this(name,sex)

32 78 Java 程序设计习题与实训教程 3" 姓名 :"+this.name+","+" 性别 :"+this.sex+","+" 年龄 :"+this.age 4new 5toString() 2. 参考源代码如下 : import java.util.date; class Account{ int id=0; double balance=0; double interestrate=0; Date datecreated; void setid(int id){ this.id=id; void setbalance(double balance){ this.balance=balance; void setinterestrate(double interestrate){ this.interestrate=interestrate; void setdatecreated(date datecreated){ this.datecreated=datecreated; int getid(){ return id; double getbalance(){ return balance+balance*getinterestrate(); double getinterestrate(){ return interestrate; Date getdatecreated(){ return datecreated; void withdraw(double num){ if(balance>=num)balance=balance-num; else System.out.println(" 余额不足!"); void deposit(double num){ balance=balance+num; class Test{ public static void main(string args[]){ Account ac=new Account();

33 第 3 章类与对象 79 ac.setid(102231); ac.setbalance(20000); ac.setinterestrate(0.0331); ac.setdatecreated(new Date()); ac.withdraw(2000); ac.deposit(3000); System.out.println(" 账户名是 :"+ac.getid()+", 开户日期为 : "+ac.getdatecreated()+", 利率是 :"+ac.getinterestrate()+", 余额为 : "+ac.getbalance()); 类的继承 实训目的 1. 理解类有继承性 2. 利用继承性由父类创建子类, 掌握方法重写的使用 3. 理解成员变量 成员方法的继承与隐藏, 掌握 super 关键字的使用 实训内容定义普通人 Person 类 教师 Teacher 类 学生 Student 类, 其中 Teacher 类和 Student 类是 Person 类的子类,Person 类中包含姓名 年龄等属性, 以及显示信息等方法 Student 类除了具有 Person 类的属性外, 还有自己的属性如课程成绩 学校等, 同时有自己的显示信息的方法 Teacher 类除了具有 Person 类的属性外, 还有自己的属性如讲授的课程等, 同时有自己的显示信息的方法 编写一个测试程序, 创建学生和老师对象并显示他们的信息 参考源代码参考源代码如下 : class Person{ String name; int age; void toprintinfo(){ System.out.println(" 这个人的名字是 :"+name+", 年龄是 :"+age); class Student extends Person{ String schoolname; double score; void toprintinfo(){ super.toprintinfo(); System.out.println(" 学生的学校是 :"+schoolname+" 成绩是 :"+score);

34 80 Java 程序设计习题与实训教程 class Teacher extends Person{ String course; void toprintinfo(){ super.toprintinfo(); System.out.println(" 教师讲授的课程是 :"+course); public class Test { public static void main(string[] args) { Student z=new Student(); z.name="lili"; z.age=18; z.schoolname=" 三中 "; z.score=465; z.toprintinfo(); Teacher t=new Teacher(); t.name=" 马华 "; t.age=38; t.course=" 数学 "; t.toprintinfo(); 访问控制修饰符 实训目的掌握包结构下的类及成员的访问控制权限的设计策略 实训内容定义一个 public 类 X 和一个默认访问权限的类 Y, 每个类中包含 4 个具有不同访问控制权限的成员变量和 4 个不同访问控制权限的成员方法 分别验证类的两种访问控制权限和类成员的 4 种访问控制权限 : (1) 在类 X 中定义主方法 main(), 对 X 和 Y 类加以应用, 观察程序的编译结果 (2) 在另一个包中创建测试类 Test, 其中含有主方法, 对 X 和 Y 类加以应用, 观察程序编译结果 参考源代码 (1) 参考源代码如下 : public class X { public String s1="public"; String s2="default"; protected String s3="protected"; private String s4="private"; public void method1(){

35 第 3 章类与对象 81 System.out.println("public method"); void method2(){ System.out.println("default method"); protected void method3(){ System.out.println("protected method"); private void method4(){ System.out.println("private method"); public static void main(string[] args) { X x=new X(); System.out.println(" 变量的公有权限 "+x.s1+" 变量的默认权限 "+x.s2+" 变量的保护权限 "+x.s3+" 变量的私有权限 "+x.s4); x.method1();x.method2();x.method3();x.method4(); Y y=new Y(); System.out.println(" 变量的公有权限 "+y.str1+" 变量的默认权限 "+y.str2+" 变量的保护权限 "+y.str3+" 变量的私有权限 "+y.str4); y.m1();y.m2();y.m3();y.m4(); class Y{ public String str1="public"; String str2="default"; protected String str3="protected"; private String str4="private"; public void m1(){ System.out.println("public method"); void m2(){ System.out.println("default method"); protected void m3(){ System.out.println("protected method"); private void m4(){ System.out.println("private method"); X 类和 Y 类在同一个包中, 由于主方法是定义在 X 类中, 因此在主方法中对于 X 的对象的所有属性和方法均可访问, 而对于具有默认访问权限的类 Y 的对象的私有属性和方法不可访问

36 82 Java 程序设计习题与实训教程 (2) 参考源代码如下 : package p1; public class X { public String s1="public"; String s2="default"; protected String s3="protected"; private String s4="private"; public void method1(){ System.out.println("public method"); void method2(){ System.out.println("default method"); protected void method3(){ System.out.println("protected method"); private void method4(){ System.out.println("private method"); class Y{ public String str1="public"; String str2="default"; protected String str3="protected"; private String str4="private"; public void m1(){ System.out.println("public method"); void m2(){ System.out.println("default method"); protected void m3(){ System.out.println("protected method"); private void m4(){ System.out.println("private method"); package p2; import p1.*; public class Test { public static void main(string[] args) { X x=new X(); System.out.println(" 变量的公有权限 "+x.s1+" 变量的默认权限 "+x.s2+" 变量

37 第 3 章类与对象 83 的保护权限 "+x.s3+" 变量的私有权限 "+x.s4); x.method1();x.method2();x.method3();x.method4(); Y y=new Y(); System.out.println(" 变量的公有权限 "+y.str1+" 变量的默认权限 "+y.str2+" 变量的保护权限 "+y.str3+" 变量的私有权限 "+y.str4); y.m1();y.m2();y.m3();y.m4(); X 类和 Y 类在同一个包 p1 中, 具有主方法的测试类 Test 在包 p2 中, 对于具有公有访问权限的类 X 的对象, 其公有属性和方法均可访问, 而其余的属性和方法不可访问 而对于具有默认访问权限 Y 的对象的所有属性和方法均不可访问, 因为具有默认访问权限的类的作用范围为同一包中 非访问控制修饰符 实训目的 1. 理解 static 的使用 2. 理解抽象方法和抽象类的使用 实训内容 1. 阅读以下程序, 通过两个类说明静态变量与实例变量 静态方法与实例方法的区别 class StaticDemo { static int x; int y; public static int getx() { return x; public static void setx(int newx) { x = newx; public int gety() { return y; public void sety(int newy) { y = newy; public class Test { public static void main(string[] args) { System.out.println(" 静态变量 x="+staticdemo.getx()); System.out.println(" 实例变量 y="+staticdemo.gety()); // 编译时将出错 StaticDemo a= new StaticDemo();

38 84 Java 程序设计习题与实训教程 StaticDemo b= new StaticDemo(); a.setx(1); a.sety(2); b.setx(3); b.sety(4); System.out.println(" 静态变量 a.x="+a.getx()); System.out.println(" 实例变量 a.y="+a.gety()); System.out.println(" 静态变量 b.x="+b.getx()); System.out.println(" 实例变量 b.y="+b.gety()); 2. 定义一个抽象父类 Shape 表示形状, 它包含一个抽象方法 getarea(), 从 Shape 类派生出 Rectangle 和 Circle 类表示矩形和圆, 这两个类都用 getarea() 方法计算对象的面积 编写应用程序使用 Rectangle 和 Circle 类 参考源代码 1. 此题注意类变量和类方法的访问方式 非 static 声明的方法可以调用类方法或类变量, 但类方法不能调用非静态的变量或方法 2. 参考源代码如下 : abstract class Shape{ abstract double getarea(); class Rectangle extends Shape{ double height; double length; Rectangle(double height,double length){ this.height=height; this.length=length; double getarea(){ return height*length; class Circle extends Shape{ double radius; Circle(double radius){ this.radius=radius; double getarea(){ return 3.14*radius*radius; public class Test{ public static void main(string args[]){

39 第 3 章类与对象 85 Rectangle r=new Rectangle(5,10); System.out.println(" 矩形的面积是 :"+r.getarea()); Circle c=new Circle(3); System.out.println(" 圆的面积是 :"+c.getarea()); 包 实训目的 1. 理解 Java 中包的组织结构和定义方法 2. 使用 jar 命令, 创建可执行的 jar 包 实训内容定义普通人 教师 学生这些类, 提供适当的成员变量 方法用于描述其内部数据和行为特征, 并提供主类使之运行 要求有良好的封装性, 将不同类放在不同的包下面, 创建可执行的 jar 包 参考源代码参考源代码如下 ( 假设代码在同一项目中 ): package p1; public class Person { String id; String name; int age; public Person(){ public Person(String id,string name,int age){ this.id=id; this.name=name; this.age=age; protected void printinfo(){ System.out.println(" 这个人的身份证号是 :"+id+", 名字 :"+name+", 年龄 : "+age); package p2; import p1.person; public class Teacher extends Person{ double salary; String course; public Teacher(double salary,string course){ this.salary=salary; this.course=course;

40 86 Java 程序设计习题与实训教程 public Teacher(String id,string name,int age,double salary,string course){ super(id,name,age); this.salary=salary; this.course=course; public void printinfo(){ super.printinfo(); System.out.println(" 薪水 :"+salary+", 课程 :"+course); package p3; import p1.person; public class Student extends Person{ String schoolname; double score; public Student(String schoolname,double score){ this.schoolname=schoolname; this.score=score; public Student(String id,string name,int age,string schoolname,double score){ super(id,name,age); this.schoolname=schoolname; this.score=score; public void printinfo(){ super.printinfo(); System.out.println(" 学校是 :"+schoolname+", 成绩 :"+score); package p; import p2.teacher; import p3.student; public class Test { public static void main(string[] args) { Teacher t=new Teacher(" "," 马华 ",38,3000," 数学 "); t.printinfo(); Student s=new Student(" ","lili",16," 三中 ",620); s.printinfo(); 将 Person 类打包成 jar 文件, 以及使用 jar 包的操作 : 打开命令提示符, 进入 d:\workspace\k\src 目录, 输入命令 :

41 第 3 章类与对象 87 java-cvf Person.jar p1 上面的命令用于把 p1 目录下的全部内容生成一个 Person.jar 文件 注意, 如果当前目录下已经存在 Person.jar 文件, 那么该文件将被覆盖 在使用 jar 包时, 只需要在 classpath 环境变量中包含这个 jar 文件的路径,Java 虚拟机就能自动在内存中解压这个 jar 文件, 根据包名对应的目录结构去寻找所需要的类 接口 实训目的 1. 了解接口的继承性 2. 掌握接口的实现与运用方法 3. 巩固 Java 的多态性与继承性的应用 实训内容设计接口 Vehicle 表示运输工具, 有移动 (move) 加速(speedUp) 减速(slowDown) 停止 (stop) 等方法 设计汽车 Automobile 货车 Van 轿车 Car 等类的实现接口 Vehicle, 其中 Automobile 是抽象父类, 有名称 (name) 最大载重量(loadCapacity) 最高速度 (maxspeed) 等属性,Van 和 Car 是 Automobile 的子类, 同时要求设计主类使程序运行 该实验内容要求涵盖接口 抽象类 继承等核心知识点 参考源代码参考源代码如下 : interface Vehicle{ void move(); void speedup(); void slowdown(); void stop(); abstract class Automobile implements Vehicle{ String name; int loadcapacity; int maxspeed; public void move(){ System.out.println(" 是汽车在公路上行驶!"); class Van extends Automobile{ public Van(String name,int loadcapacity,int maxspeed){ this.name=name; this.loadcapacity=loadcapacity; this.maxspeed=maxspeed; public void speedup(){

42 88 Java 程序设计习题与实训教程 System.out.println(" 是 Van 在加速!"); public void slowdown(){ System.out.println(" 是 Van 在减速!"); public void stop(){ System.out.println(" 是 Van 在制动!"); class Car extends Automobile{ public Car(String name,int loadcapacity,int maxspeed){ this.name=name; this.loadcapacity=loadcapacity; this.maxspeed=maxspeed; public void speedup(){ System.out.println(" 是 Car 在加速!"); public void slowdown(){ System.out.println(" 是 Car 在减速!"); public void stop(){ System.out.println(" 是 Car 在制动!"); public class Test { public static void main(string[] args) { Van v=new Van(" 货车 ",6,100); v.move();v.speedup();v.slowdown();v.stop(); Car c=new Car(" 轿车 ",4,120); c.move();c.speedup();c.slowdown();c.stop(); 3.5 拓展训练 1. 一个子类继承父类, 运行程序可以观察父类与子类的初始化顺序 class Art{ Art(){ System.out.println("Art constructor"); class Drawing extends Art{

43 第 3 章类与对象 89 Drawing(){ System.out.println("Drawing constructou"); class Cartoon extends Drawing{ public Cartoon(){ System.out.println("Cartoon constructor"); public class Test{ public static void main(string args[]){ new Cartoon(); 2. 抽象类实现接口 interface A{ public String author = "lili" ; public void printinfo() ; public String getinfo() ; abstract class B implements A{ public abstract void say() ; class X extends B{ public void say(){ System.out.println("Hello World!!!") ; public String getinfo(){ return "HELLO" ; public void printinfo(){ System.out.println(" 作者 :" +author) ; public class Test{ public static void main(string args[]){ X x = new X() ; x.say() ; x.printinfo() ;

Microsoft Word - 新1-12.doc

Microsoft Word - 新1-12.doc 实训 5 面向对象编程练习 实训 5 面向对象编程练习 5.1 实训目的 通过编程和上机实验理解 Java 语言是如何体现面向对象编程基本思想 以及如何创建类 和对象 了解成员变量和成员方法的特性 5.2 实训要求 编写一个体现面向对象思想的程序 编写一个创建对象和使用对象的方法的程序 5.3 实训内容 5.3.1 创建对象并使用对象 1 定义一个 Person 类 可以在应用程序中使用该类 成员属性

More information

OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数

OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数 复习 类的复用 组合 (composition): has-a 关系 class MyType { public int i; public double d; public char c; public void set(double

More information

1 下列类头定义中, 正确的是 面向对象程序设计网络课程 A class x { } B public x extends y { } C public class x extends y {.} D class x extends y implements y1 { } 2 现有两个类 A B,

1 下列类头定义中, 正确的是 面向对象程序设计网络课程 A class x { } B public x extends y { } C public class x extends y {.} D class x extends y implements y1 { } 2 现有两个类 A B, 1 下列类头定义中, 正确的是 A class x B public x extends y C public class x extends y. D class x extends y implements y1 2 现有两个类 A B, 以下描述中表示 B 继承自 A 的是 (D ) A) class A extends B B) class B implements A C) class A

More information

エスポラージュ株式会社 住所 : 東京都江東区大島 東急ドエルアルス大島 HP: ******************* * 关于 Java 测试试题 ******

エスポラージュ株式会社 住所 : 東京都江東区大島 東急ドエルアルス大島 HP:  ******************* * 关于 Java 测试试题 ****** ******************* * 关于 Java 测试试题 ******************* 問 1 运行下面的程序, 选出一个正确的运行结果 public class Sample { public static void main(string[] args) { int[] test = { 1, 2, 3, 4, 5 ; for(int i = 1 ; i System.out.print(test[i]);

More information

OOP with Java 通知 Project 4: 4 月 19 日晚 9 点

OOP with Java 通知 Project 4: 4 月 19 日晚 9 点 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 4: 4 月 19 日晚 9 点 复习 类的复用 组合 (composition): has-a 关系 class MyType { public int i; public double d; public char c; public void set(double x) { d

More information

软件工程文档编制

软件工程文档编制 实训抽象类 一 实训目标 掌握抽象类的定义 使用 掌握运行时多态 二 知识点 抽象类的语法格式如下 : public abstract class ClassName abstract void 方法名称 ( 参数 ); // 非抽象方法的实现代码 在使用抽象类时需要注意如下几点 : 1 抽象类不能被实例化, 实例化的工作应该交由它的子类来完成 2 抽象方法必须由子类来进行重写 3 只要包含一个抽象方法的抽象类,

More information

OOP with Java 通知 Project 3: 3 月 29 日晚 9 点 4 月 1 日上课

OOP with Java 通知 Project 3: 3 月 29 日晚 9 点 4 月 1 日上课 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 3: 3 月 29 日晚 9 点 4 月 1 日上课 复习 Java 包 创建包 : package 语句, 包结构与目录结构一致 使用包 : import restaurant/ - people/ - Cook.class - Waiter.class - tools/ - Fork.class

More information

OOP with Java 通知 Project 4: 5 月 2 日晚 9 点

OOP with Java 通知 Project 4: 5 月 2 日晚 9 点 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 4: 5 月 2 日晚 9 点 复习 类的复用 组合 (composition): has-a 关系 class MyType { public int i; public double d; public char c; public void set(double x) { d =

More information

OOP with Java 通知 Project 3 提交时间 3 月 29 日晚 9 点 Piazza Project 2 投票

OOP with Java 通知 Project 3 提交时间 3 月 29 日晚 9 点 Piazza Project 2 投票 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 3 提交时间 3 月 29 日晚 9 点 Piazza Project 2 投票 复习 创建对象 构造函数 函数重载 : 函数 = 函数名 + 参数列表 public class MyType { int i; double d; char c; void set(double x)

More information

OOP with Java 通知 Project 4: 5 月 2 日晚 9 点

OOP with Java 通知 Project 4: 5 月 2 日晚 9 点 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 4: 5 月 2 日晚 9 点 复习 Java 包 创建包 : package 语句, 包结构与目录结构一致 使用包 : import restaurant/ - people/ - Cook.class - Waiter.class - tools/ - Fork.class - Table.class

More information

模板

模板 制作人 : 张刚 目录 类和对象 面向对象程序设计基本特征 类的声明 构造方法 成员变量和方法 封装 继承 多态 包 访问控制 final static 抽象类和接口 内部类 沈阳工业大学软件学院 Java 课程教研组 Page 2 核心知识点 类 对象 三个基本特征 类的基本结构 成员变量 构造方法 成员方法 类实例 对象创建和操作 沈阳工业大学软件学院 Java 课程教研组 Page 3 1.

More information

Chapter 9: Objects and Classes

Chapter 9: Objects and Classes Fortran Algol Pascal Modula-2 BCPL C Simula SmallTalk C++ Ada Java C# C Fortran 5.1 message A B 5.2 1 class Vehicle subclass Car object mycar public class Vehicle extends Object{ public int WheelNum

More information

新・解きながら学ぶJava

新・解きながら学ぶJava 481! 41, 74!= 40, 270 " 4 % 23, 25 %% 121 %c 425 %d 121 %o 121 %x 121 & 199 && 48 ' 81, 425 ( ) 14, 17 ( ) 128 ( ) 183 * 23 */ 3, 390 ++ 79 ++ 80 += 93 + 22 + 23 + 279 + 14 + 124 + 7, 148, 16 -- 79 --

More information

Microsoft PowerPoint - 6. 用户定义类型User-defined Datatypes.ppt [兼容模式]

Microsoft PowerPoint - 6. 用户定义类型User-defined Datatypes.ppt [兼容模式] 用户定义类型 User-defined Datatypes classes and structs 几何向量 (Geometry Vector) 二维平面上的向量由起点和终点构成 每个点包含两个坐标 (x, y), 因此一个向量需要四个实数表示 Start= (0.9,1.5) Start= (0.4,0.8) int main() { double xstart = 0.4; double xend

More information

无类继承.key

无类继承.key 无类继承 JavaScript 面向对象的根基 周爱 民 / aimingoo aiming@gmail.com https://aimingoo.github.io https://github.com/aimingoo rand = new Person("Rand McKinnon",... https://docs.oracle.com/cd/e19957-01/816-6408-10/object.htm#1193255

More information

教案模板4-2

教案模板4-2 传智播客 Java 基础入门 教学设计 课程名称 : Java 基础入门 授课年级 : 2014 年级 授课学期 : 2014 学年第一学期 教师姓名 : 某某老师 2014 年 02 月 09 日 课题名称第 3 章面向对象上 计划学时 6 课时 Java 是一种面向对象的语言, 认识面向对象的编程思想对于 Java 学习至关重 内容分析 要 在面向对象中, 有两个重要的概念, 分别是类和对象,

More information

KillTest 质量更高 服务更好 学习资料 半年免费更新服务

KillTest 质量更高 服务更好 学习资料   半年免费更新服务 KillTest 质量更高 服务更好 学习资料 http://www.killtest.cn 半年免费更新服务 Exam : 310-065Big5 Title : Sun Certified Programmer for the Java 2 Platform, SE 6.0 Version : Demo 1 / 14 1. 35. String #name = "Jane Doe"; 36. int

More information

OOP with Java 通知 Project 4: 推迟至 4 月 25 日晚 9 点

OOP with Java 通知 Project 4: 推迟至 4 月 25 日晚 9 点 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 4: 推迟至 4 月 25 日晚 9 点 复习 Protected 可以被子类 / 同一包中的类访问, 不能被其他类访问 弱化的 private 同时赋予 package access class MyType { public int i; public double d; public

More information

Microsoft Word - word模板-教师.doc

Microsoft Word - word模板-教师.doc 传智播客 Java 基础入门 教学设计 课程名称 : Java 基础入门 授课年级 : 2014 年级 授课学期 : 2014 学年第一学期 教师姓名 : 某某老师 2014 年 02 月 09 日 课题名称内容分析教学目标及基本要求重点及措施难点及措施 计划第 3 章面向对象上 6 课时学时 Java 是一种面向对象的语言, 认识面向对象的编程思想对于 Java 学习至关重要 在面向对象中, 有两个重要的概念,

More information

KillTest 质量更高 服务更好 学习资料 半年免费更新服务

KillTest 质量更高 服务更好 学习资料   半年免费更新服务 KillTest 质量更高 服务更好 学习资料 http://www.killtest.cn 半年免费更新服务 Exam : 310-055Big5 Title : Sun Certified Programmer for the Java 2 Platform.SE 5.0 Version : Demo 1 / 22 1. 11. public static void parse(string str)

More information

Microsoft Word - 第5章.doc

Microsoft Word - 第5章.doc 上机实践 5 子类与继承 实验 1 中国人 北京人和美国人 1 相关知识点 由继承而得到的类称为子类, 被继承的类称为父类 ( 超类 ),Java 不支持多重继承, 即子类只能有一个父类 人们习惯地称子类与父类的关系是 is-a 关系 如果子类和父类在同一个包中, 那么, 子类自然地继承了其父类中不是 private 的成员变量作为自己的成员变量, 并且也自然地继承了父类中不是 private 的方法作为自己的方法,

More information

untitled

untitled 1 Outline 類别 欄 (1) 類 類 狀 更 易 類 理 若 類 利 來 利 using 來 namespace 類 ; (2) namespace IBM class Notebook namespace Compaq class Notebook 類别 類 來 類 列 欄 (field) (property) (method) (event) 類 例 立 來 車 類 類 立 車 欄 料

More information

OOP with Java 通知 Project 4: 4 月 19 日晚 9 点

OOP with Java 通知 Project 4: 4 月 19 日晚 9 点 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 4: 4 月 19 日晚 9 点 复习 Protected 可以被子类 / 同一包中的类访问, 不能被其他类访问 弱化的 private 同时赋予 package access class MyType { public int i; public double d; public char

More information

chp5_1

chp5_1 Java 软件设计基础 5. 继承与多态 类的封装 类的特性 Java 程序设计的基本单位是类, 类是用来创建具体对象的模板, 有以下三个重要特性 : 封装 Java 语言中, 对象就是对一组变量和相关方法的封装 (Encapsulation), 通过对对象的封装, 实现模块化和信息隐藏 通过对类的成员辅以一定的访问限制, 实现类中成员的信息隐藏 继承 继承 (inheritance) 允许创建分等级层次的类,

More information

姓名 : 年级专业 : 学号 : 凡年级专业 姓名 学号错写 漏写或字迹不清者, 成绩按零分记 密 封 线 java 较难 试卷 总分 题号 一 二 三 四 五 题分 得分 D 国际通信协议 4 下面选项中, 不是面向对象的特征的是 ( ) A 封装 B 继承 得分 一 单选题 ( 每题 3 分,

姓名 : 年级专业 : 学号 : 凡年级专业 姓名 学号错写 漏写或字迹不清者, 成绩按零分记 密 封 线 java 较难 试卷 总分 题号 一 二 三 四 五 题分 得分 D 国际通信协议 4 下面选项中, 不是面向对象的特征的是 ( ) A 封装 B 继承 得分 一 单选题 ( 每题 3 分, java 较难 试卷 总分 题号 一 二 三 四 五 题分 D 国际通信协议 4 下面选项中, 不是面向对象的特征的是 ( ) A 封装 B 继承 一 单选题 ( 每题 3 分, 共计 15 分 ) 1 下列修饰符中, 成员内部类被 ( ) 修饰后, 可以被外界访问 C 多态 D 重构 5 下列关于构造方法重载的说法中, 错误的是 () A 不同构造方法中调用本类其它的构造方法时, 需要使用 this([

More information

Microsoft Word - 第5章.doc

Microsoft Word - 第5章.doc 第 5 章 面向对象编程 除了基本的类和对象,Java 语言的面向对象编程还包括抽象类 接口 内部类及包等高级特性 通过对这些高级特性的支持,Java 语言全面实现了面向对象的编程 本章将进一步深入介绍 Java 语言面向对象编程方面的知识 5.1 类的三大特性 第 4 章介绍了有关类定义的基本知识 面向对象中的类还具有封装 继承与多态的特性, 这也是面向对象编程所具有的重要特点 Java 语言对类的封装

More information

C++ 程序设计 告别 OJ2 - 参考答案 MASTER 2019 年 5 月 3 日 1

C++ 程序设计 告别 OJ2 - 参考答案 MASTER 2019 年 5 月 3 日 1 C++ 程序设计 告别 OJ2 - 参考答案 MASTER 2019 年 5 月 3 日 1 1 TEMPLATE 1 Template 描述 使用模板函数求最大值 使用如下 main 函数对程序进行测试 int main() { double a, b; cin >> a >> b; cout c >> d; cout

More information

OOP with Java 通知 Project 4: 5 月 2 日晚 9 点

OOP with Java 通知 Project 4: 5 月 2 日晚 9 点 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 4: 5 月 2 日晚 9 点 复习 Protected 可以被子类 / 同一包中的类访问, 不能被其他类访问 弱化的 private 同时赋予 package access class MyType { public int i; public double d; public char

More information

OOP with Java 通知 Project 2 提交时间 : 3 月 14 日晚 9 点 另一名助教 : 王桢 学习使用文本编辑器 学习使用 cmd: Power shell 阅读参考资料

OOP with Java 通知 Project 2 提交时间 : 3 月 14 日晚 9 点 另一名助教 : 王桢   学习使用文本编辑器 学习使用 cmd: Power shell 阅读参考资料 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 2 提交时间 : 3 月 14 日晚 9 点 另一名助教 : 王桢 Email: 51141201063@ecnu.cn 学习使用文本编辑器 学习使用 cmd: Power shell 阅读参考资料 OOP with Java Java 类型 引用 不可变类型 对象存储位置 作用域 OOP

More information

SDK 概要 使用 Maven 的用户可以从 Maven 库中搜索 "odps-sdk" 获取不同版本的 Java SDK: 包名 odps-sdk-core odps-sdk-commons odps-sdk-udf odps-sdk-mapred odps-sdk-graph 描述 ODPS 基

SDK 概要 使用 Maven 的用户可以从 Maven 库中搜索 odps-sdk 获取不同版本的 Java SDK: 包名 odps-sdk-core odps-sdk-commons odps-sdk-udf odps-sdk-mapred odps-sdk-graph 描述 ODPS 基 开放数据处理服务 ODPS SDK SDK 概要 使用 Maven 的用户可以从 Maven 库中搜索 "odps-sdk" 获取不同版本的 Java SDK: 包名 odps-sdk-core odps-sdk-commons odps-sdk-udf odps-sdk-mapred odps-sdk-graph 描述 ODPS 基础功能的主体接口, 搜索关键词 "odpssdk-core" 一些

More information

Microsoft Word - 第3章.doc

Microsoft Word - 第3章.doc 第 3 章 lambda 表达式及其应用 lambda 表达式是 Java 8 提供的一种新特性, 它使得 Java 也能像 C# 和 C++ 语言一样进行简单的 函数式编程, 这不仅简化了某些通用结构的实现方式, 也大大增强了 Java 语言的表达功能 3.1 lambda 表达式简介 lambda 表达式是基于数学中的 λ 演算得名, 本质上就是一个没有方法名的匿名方法 例如, 有一个方法定义如下

More information

《计算概论》课程 第十九讲 C 程序设计语言应用

《计算概论》课程 第十九讲  C 程序设计语言应用 Java 高级技术 课程第二讲 Java 语言的面向对象特性 (2) 李戈 北京大学信息科学技术学院软件研究所 2010 年 3 月 21 日 课程助教 : 前言 黎育龙 (10817195@pub.ss.pku.edu.cn) Email 标题 :Java 高级技术 + 题目 请不要把作业发到我的信箱 ; 新的课程网站 http://www.ontoedu.pku.edu.cn/index.jsp

More information

Microsoft Word - 第2章.doc

Microsoft Word - 第2章.doc 2 第第 2 章 学习第 1 章后, 读者已经对 Java 语言有了初步的了解, 本章将具体解析 Java 类的组成元素 任何一个 Java 类, 都有 5 种基本组成元素 : 属性 方法 构造方法 块和内部类 其中属性 方法 构造方法是使用最多的元素, 而块 内部类使用较少 本章将对各种元素进行学习 Java 类基本结构 2.1 类 类 Java 类的声明形式 访问权限修饰符 修饰符 class

More information

Microsoft PowerPoint - 8. 运算符重载 Operator Overloading.pptx

Microsoft PowerPoint - 8. 运算符重载 Operator Overloading.pptx 运算符重载 Operator Overloading class Point { public: ; double x_, y_; Why Operator Overloading? Point (double x =0, double y = 0):x_(x),y_(y) { int main(){ Point a(1., 2), b(3,4); Point c = a + b; return 0;

More information

OOP with Java 通知 Project 3: 4 月 19 日晚 9 点

OOP with Java 通知 Project 3: 4 月 19 日晚 9 点 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 3: 4 月 19 日晚 9 点 复习 Upcasting 同一基类的不同子类可以被视为同一类型 ( 基类 ) 放宽类型一致性 简化接口 class A{ class B{ A a = new A(); B b = new B(); // A a = new B(); compile

More information

C++ 程序设计 告别 OJ1 - 参考答案 MASTER 2019 年 5 月 3 日 1

C++ 程序设计 告别 OJ1 - 参考答案 MASTER 2019 年 5 月 3 日 1 C++ 程序设计 告别 OJ1 - 参考答案 MASTER 2019 年 月 3 日 1 1 INPUTOUTPUT 1 InputOutput 题目描述 用 cin 输入你的姓名 ( 没有空格 ) 和年龄 ( 整数 ), 并用 cout 输出 输入输出符合以下范例 输入 master 999 输出 I am master, 999 years old. 注意 "," 后面有一个空格,"." 结束,

More information

第3 章 类 对象与方法 3.1 类 类的定义 在 Objective-C 中 每个类的定义包括两个部分 接口 interface 和实现 implementation 接口部 分定义在.h 文件中 包含类的声明 属性以及方法 主要作用是对外提供访问接口 实现部分定义在.m 文件中 主要

第3 章 类 对象与方法 3.1 类 类的定义 在 Objective-C 中 每个类的定义包括两个部分 接口 interface 和实现 implementation 接口部 分定义在.h 文件中 包含类的声明 属性以及方法 主要作用是对外提供访问接口 实现部分定义在.m 文件中 主要 第3 章 类 对象与方法 3.1 类 3.1.1 类的定义 在 Objective-C 中 每个类的定义包括两个部分 接口 interface 和实现 implementation 接口部 分定义在.h 文件中 包含类的声明 属性以及方法 主要作用是对外提供访问接口 实现部分定义在.m 文件中 主要用于方法的功能实现 这种定义类的方法 好处在于将公共声明 接口 与代码实现分开 对外屏蔽了功能实现的细节

More information

untitled

untitled 1 Outline 數 料 數 數 列 亂數 練 數 數 數 來 數 數 來 數 料 利 料 來 數 A-Z a-z _ () 不 數 0-9 數 不 數 SCHOOL School school 數 讀 school_name schoolname 易 不 C# my name 7_eleven B&Q new C# (1) public protected private params override

More information

(TestFailure) JUnit Framework AssertionFailedError JUnit Composite TestSuite Test TestSuite run() run() JUnit

(TestFailure) JUnit Framework AssertionFailedError JUnit Composite TestSuite Test TestSuite run() run() JUnit Tomcat Web JUnit Cactus JUnit Java Cactus JUnit 26.1 JUnit Java JUnit JUnit Java JSP Servlet JUnit Java Erich Gamma Kent Beck xunit JUnit boolean JUnit Java JUnit Java JUnit Java 26.1.1 JUnit JUnit How

More information

Guava学习之Resources

Guava学习之Resources Resources 提供提供操作 classpath 路径下所有资源的方法 除非另有说明, 否则类中所有方法的参数都不能为 null 虽然有些方法的参数是 URL 类型的, 但是这些方法实现通常不是以 HTTP 完成的 ; 同时这些资源也非 classpath 路径下的 下面两个函数都是根据资源的名称得到其绝对路径, 从函数里面可以看出,Resources 类中的 getresource 函数都是基于

More information

Strings

Strings Polymorphism and Virtual Functions Cheng-Chin Chiang Virtual Function Basics 多 型 (Polymorphism) 賦 予 一 個 函 數 多 種 意 涵, 存 在 於 同 一 類 別 之 內 祖 先 類 別 與 後 代 類 別 間 物 件 導 向 程 式 設 計 基 本 原 理 虛 擬 函 數 (Virtual Function)

More information

javaexample-02.pdf

javaexample-02.pdf n e w. s t a t i c s t a t i c 3 1 3 2 p u b l i c p r i v a t e p r o t e c t e d j a v a. l a n g. O b j e c t O b j e c t Rect R e c t x 1 y 1 x 2 y 2 R e c t t o S t r i n g ( ) j a v a. l a n g. O

More information

北 风 网 讲 师 原 创 作 品 ---- 仅 供 学 员 内 部 交 流 使 用 前 言 吾 尝 终 日 而 思 矣, 不 如 须 臾 之 所 学 也 ; 吾 尝 跂 而 望 矣, 不 如 登 高 之 博 见 也 登 高 而 招, 臂 非 加 长 也, 而 见

北 风 网 讲 师 原 创 作 品 ---- 仅 供  学 员 内 部 交 流 使 用 前 言 吾 尝 终 日 而 思 矣, 不 如 须 臾 之 所 学 也 ; 吾 尝 跂 而 望 矣, 不 如 登 高 之 博 见 也 登 高 而 招, 臂 非 加 长 也, 而 见 北 风 网 讲 师 原 创 作 品 ---- 仅 供 www.ibeifeng.com 学 员 内 部 交 流 使 用 前 言 吾 尝 终 日 而 思 矣, 不 如 须 臾 之 所 学 也 ; 吾 尝 跂 而 望 矣, 不 如 登 高 之 博 见 也 登 高 而 招, 臂 非 加 长 也, 而 见 者 远 ; 顺 风 而 呼, 声 非 加 疾 也, 而 闻 者 彰 假 舆 马 者, 非 利 足 也,

More information

untitled

untitled 3 C++ 3.1 3.2 3.3 3.4 new delete 3.5 this 3.6 3.7 3.1 3.1 class struct union struct union C class C++ C++ 3.1 3.1 #include struct STRING { typedef char *CHARPTR; // CHARPTR s; // int strlen(

More information

chp4

chp4 Java 软件开发基础 4. 面向对象的程序设计基础 4.1 面向对象基础 对象 现实世界中复杂的对象是由许多小的 简单的对象组成的 客观存在的物体就是最基本的对象 不同的物体有共性, 共性存在于个性之中, 物体的个性又继承了共性 对象的状态属性 对象蕴含着许多信息, 可以用一组状态来表征 对象的行为操作 对象内部含有对数据的操作, 即对象的行为操作 某类事物的抽象 某类对象是对现实世界具有共同特性的某类事物的抽象

More information

使 用 Java 语 言 模 拟 保 险 箱 容 量 门 板 厚 度 箱 体 厚 度 属 性 锁 具 类 型 开 保 险 箱 关 保 险 箱 动 作 存 取 款

使 用 Java 语 言 模 拟 保 险 箱 容 量 门 板 厚 度 箱 体 厚 度 属 性 锁 具 类 型 开 保 险 箱 关 保 险 箱 动 作 存 取 款 JAVA 程 序 设 计 ( 肆 ) 徐 东 / 数 学 系 使 用 Java 语 言 模 拟 保 险 箱 容 量 门 板 厚 度 箱 体 厚 度 属 性 锁 具 类 型 开 保 险 箱 关 保 险 箱 动 作 存 取 款 使 用 Java class 代 表 保 险 箱 public class SaveBox 类 名 类 类 体 实 现 封 装 性 使 用 class SaveBox 代 表 保

More information

第三章面向对象基本特性 面向对象程序设计是一种先进的编程思想, 更加容易解决复杂的问题 面向对象系统最突出的特性是封装性 继承性和多态性 学习完本章节, 您能够 : 理解封装的概念 实现对象封装特性 实现继承特性 使用接口 掌握对象的多态性 任务 3.1 保护个人数据 情境描述 Tom

第三章面向对象基本特性 面向对象程序设计是一种先进的编程思想, 更加容易解决复杂的问题 面向对象系统最突出的特性是封装性 继承性和多态性 学习完本章节, 您能够 : 理解封装的概念 实现对象封装特性 实现继承特性 使用接口 掌握对象的多态性 任务 3.1 保护个人数据 情境描述 Tom 第三章面向对象基本特性 面向对象程序设计是一种先进的编程思想, 更加容易解决复杂的问题 面向对象系统最突出的特性是封装性 继承性和多态性 学习完本章节, 您能够 : 理解封装的概念 实现对象封装特性 实现继承特性 使用接口 掌握对象的多态性 任务 3.1 保护个人数据 3.1.1 情境描述 Tom 设计的 A 类员工类, 外部可以直接访问它的成员变量, 在现实社会中, 一个对象的 某些属性外界是不可以得知的,

More information

C++ 程序设计 OJ1 - 参考答案 MASTER 2019 年 5 月 3 日 1

C++ 程序设计 OJ1 - 参考答案 MASTER 2019 年 5 月 3 日 1 C++ 程序设计 OJ1 - 参考答案 MASTER 2019 年 5 月 3 日 1 1 CIRCLE 1 Circle 描述 编写一个圆类 Circle, 实现半径的输入 面积的计算和输出 输入 圆的半径 (double 类型 ) 输出 圆的面积 ( 保留小数点后两位 ) 样例输入 3 样例输出 28.27 提示 圆周率的取值需要比较精确, 以保证计算结果的精度 #include

More information

Microsoft Word - 第5章.doc

Microsoft Word - 第5章.doc 第 5 课 深入面向对象编程 在面向对象的概念中, 大家可以知道所有的对象都是通过类来描绘的, 但是反过来却不是这样, 并不是所有的类都是用来描绘对象的 如果一个类中没有包含足够的信息来描绘一个具体的对象, 那么这样的类就是抽象类 由于 Java 语言只支持单继承, 那么接口的存在就弥补了单继承的不足 内部类也是嵌套的类, 方法的重载和重写是 Java 语言多态性的不同表现 本课将深入讲解面向对象编程中的这些类和方法的使用以及包的概念

More information

Chapter 9: Objects and Classes

Chapter 9: Objects and Classes Java application Java main applet Web applet Runnable Thread CPU Thread 1 Thread 2 Thread 3 CUP Thread 1 Thread 2 Thread 3 ,,. (new) Thread (runnable) start( ) CPU (running) run ( ) blocked CPU sleep(

More information

《C语言程序设计》教材习题参考答案

《C语言程序设计》教材习题参考答案 教材名称 : C 语言程序设计 ( 第 1 版 ) 黄保和 江弋编著清华大学出版社 ISBN:978-7-302-13599-9, 红色封面 答案制作时间 :2011 年 2 月 -5 月 一 选择题 1. 设已定义 int a, * p, 下列赋值表达式中正确的是 :C)p=&a 2. 设已定义 int x,*p=&x;, 则下列表达式中错误的是 :B)&*x 3. 若已定义 int a=1,*b=&a;,

More information

第八章类和对象的扩展 实验目的 (1) 类的继承 a. 掌握父类及子类的关系及创建方法 b. 掌握上转型对象的使用方法 c. 掌握子类对象创建过程中与父类构造方法的关系, 及 super 关键字的用法 (2) 多态与接口 a. 掌握抽象类与抽象方法的概念 b. 掌握多态的实现原理及方法 c. 了解成

第八章类和对象的扩展 实验目的 (1) 类的继承 a. 掌握父类及子类的关系及创建方法 b. 掌握上转型对象的使用方法 c. 掌握子类对象创建过程中与父类构造方法的关系, 及 super 关键字的用法 (2) 多态与接口 a. 掌握抽象类与抽象方法的概念 b. 掌握多态的实现原理及方法 c. 了解成 第八章类和对象的扩展 实验目的 (1) 类的继承 a. 掌握父类及子类的关系及创建方法 b. 掌握上转型对象的使用方法 c. 掌握子类对象创建过程中与父类构造方法的关系, 及 super 关键字的用法 (2) 多态与接口 a. 掌握抽象类与抽象方法的概念 b. 掌握多态的实现原理及方法 c. 了解成员变量的隐藏 d. 掌握接口的设计方法 实验范例 例 1:( 继承 ) (1) 编写一个圆类 Circle,

More information

詞 彙 表 編 號 詞 彙 描 述 1 預 約 人 資 料 中 文 姓 名 英 文 姓 名 身 份 證 字 號 預 約 人 電 話 性 別 2 付 款 資 料 信 用 卡 別 信 用 卡 號 信 用 卡 有 效 日 期 3 住 房 條 件 入 住 日 期 退 房 日 期 人 數 房 間 數 量 入

詞 彙 表 編 號 詞 彙 描 述 1 預 約 人 資 料 中 文 姓 名 英 文 姓 名 身 份 證 字 號 預 約 人 電 話 性 別 2 付 款 資 料 信 用 卡 別 信 用 卡 號 信 用 卡 有 效 日 期 3 住 房 條 件 入 住 日 期 退 房 日 期 人 數 房 間 數 量 入 100 年 特 種 考 試 地 方 政 府 公 務 人 員 考 試 試 題 等 別 : 三 等 考 試 類 科 : 資 訊 處 理 科 目 : 系 統 分 析 與 設 計 一 請 參 考 下 列 旅 館 管 理 系 統 的 使 用 案 例 圖 (Use Case Diagram) 撰 寫 預 約 房 間 的 使 用 案 例 規 格 書 (Use Case Specification), 繪 出 入

More information

<4D F736F F F696E74202D C DB5DA3131D5C25FBCCCB3D0BACDB6E0CCAC2E BBCE6C8DDC4A3CABD5D>

<4D F736F F F696E74202D C DB5DA3131D5C25FBCCCB3D0BACDB6E0CCAC2E BBCE6C8DDC4A3CABD5D> 第 11 章继承和多态 1 动因 假设要定义一个类来对圆 矩形和三角形建模 这些类有 很多共同的特性 设计这些类来避免冗余的最好的方式是 什么? 答案就是使用继承 2 学习目标 通过继承由父类创建子类 ( 第 11.2 节 ) 使用关键字 super 调用父类的构造方法和方法 ( 第 11.3 节 ) 在子类中覆盖实例方法 ( 第 11.4 节 ) 区分覆盖和重载的不同 ( 第 11.5 节 ) 探究

More information

2009年3月全国计算机等级考试二级Java语言程序设计笔试试题

2009年3月全国计算机等级考试二级Java语言程序设计笔试试题 2009 年 3 月 全 国 计 算 机 等 级 考 试 笔 试 试 卷 二 级 Java 语 言 程 序 设 计 ( 考 试 时 间 90 分 钟, 满 分 100 分 ) 一 选 择 题 ( 每 题 2 分, 共 70 分 ) 下 列 各 题 A) B) C) D) 四 个 选 项 中, 只 有 一 个 选 项 是 正 确 的 请 将 正 确 选 项 填 涂 在 答 题 卡 相 应 位 置 上,

More information

public class Phone { String brand; double price; void call(){ System.out.println("hi,how are you doing"); 案例 3-2 对象的创建及对象内存图 1 考核知识点对象的创建和引用 掌握创建对象的方式

public class Phone { String brand; double price; void call(){ System.out.println(hi,how are you doing); 案例 3-2 对象的创建及对象内存图 1 考核知识点对象的创建和引用 掌握创建对象的方式 第三章补充案例 案例 3-1 类的定义 1 考核知识点类的定义 掌握类定义的格式 掌握如何在类中定义成员变量和成员方法 3 需求分析在程序中, 设计一个表示学生的类, 该类具有以下属性和方法 : 该类具有表示姓名的属性 name 该类具有表示年龄的属性 age 该类具有表示说话行为的方法 speak, 并且用于输出学生的姓名和年龄 1) 使用 class 关键字定义一个表示学生类型的类, 类名为 Student

More information

Microsoft PowerPoint - 07 派生数据类型

Microsoft PowerPoint - 07 派生数据类型 能源与动力工程学院 目录 派生类型 陈 斌 固有数据类型 数值型 (numerical) 整型 INTEGER 实型 REAL 复数型 COMPLEX 非数值型 字符型 CHARACTER 逻辑型 ( 布尔型 )LOGICAL 自定义数据类型 ( 派生类型, derived type) 派生类型是指用户利用 Fortran 系统内部类型, 如整型 实型 复数型 逻辑型 字符型等的组合自行创建出一个新的数据类型,

More information

<4D6963726F736F667420506F776572506F696E74202D20332D322E432B2BC3E6CFF2B6D4CFF3B3CCD0F2C9E8BCC6A1AAD6D8D4D8A1A2BCCCB3D0A1A2B6E0CCACBACDBEDBBACF2E707074>

<4D6963726F736F667420506F776572506F696E74202D20332D322E432B2BC3E6CFF2B6D4CFF3B3CCD0F2C9E8BCC6A1AAD6D8D4D8A1A2BCCCB3D0A1A2B6E0CCACBACDBEDBBACF2E707074> 程 序 设 计 实 习 INFO130048 3-2.C++ 面 向 对 象 程 序 设 计 重 载 继 承 多 态 和 聚 合 复 旦 大 学 计 算 机 科 学 与 工 程 系 彭 鑫 pengxin@fudan.edu.cn 内 容 摘 要 方 法 重 载 类 的 继 承 对 象 引 用 和 拷 贝 构 造 函 数 虚 函 数 和 多 态 性 类 的 聚 集 复 旦 大 学 计 算 机 科 学

More information

Microsoft Word - 第3章.doc

Microsoft Word - 第3章.doc Java C++ Pascal C# C# if if if for while do while foreach while do while C# 3.1.1 ; 3-1 ischeck Test() While ischeck while static bool ischeck = true; public static void Test() while (ischeck) ; ischeck

More information

博学谷 让 IT 教学更简单, 让 IT 学习更有效 第五章补充案例 案例 5-1 声明类 一 案例描述 1 考核知识点类的声明 2 练习目标 掌握声明一个类的语法格式 掌握如何在类中声明成员变量和成员方法 3 需求分析在程序中, 设计一个表示学生的类, 该类具有以下属性和方法 : 该类具有表示姓名

博学谷 让 IT 教学更简单, 让 IT 学习更有效 第五章补充案例 案例 5-1 声明类 一 案例描述 1 考核知识点类的声明 2 练习目标 掌握声明一个类的语法格式 掌握如何在类中声明成员变量和成员方法 3 需求分析在程序中, 设计一个表示学生的类, 该类具有以下属性和方法 : 该类具有表示姓名 第五章补充案例 案例 5-1 声明类 1 考核知识点类的声明 掌握声明一个类的语法格式 掌握如何在类中声明成员变量和成员方法 3 需求分析在程序中, 设计一个表示学生的类, 该类具有以下属性和方法 : 该类具有表示姓名的属性 该类具有表示性别的属性 该类具有表示说话行为的 sayhello() 方法, 并且用于输出学生的姓名 1) 使用 class 关键字定义一个表示学生类型的类, 类名为 Student

More information

chap07.key

chap07.key #include void two(); void three(); int main() printf("i'm in main.\n"); two(); return 0; void two() printf("i'm in two.\n"); three(); void three() printf("i'm in three.\n"); void, int 标识符逗号分隔,

More information

Microsoft Word - 01.DOC

Microsoft Word - 01.DOC 第 1 章 JavaScript 简 介 JavaScript 是 NetScape 公 司 为 Navigator 浏 览 器 开 发 的, 是 写 在 HTML 文 件 中 的 一 种 脚 本 语 言, 能 实 现 网 页 内 容 的 交 互 显 示 当 用 户 在 客 户 端 显 示 该 网 页 时, 浏 览 器 就 会 执 行 JavaScript 程 序, 用 户 通 过 交 互 式 的

More information

OOP with Java 通知 : Project 2 提交时间 : 3 月 14 日晚 9 点 另一名助教 : 王桢

OOP with Java 通知 : Project 2 提交时间 : 3 月 14 日晚 9 点 另一名助教 : 王桢 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 : Project 2 提交时间 : 3 月 14 日晚 9 点 另一名助教 : 王桢 Email: 51141201063@ecnu.cn 复习 : Java 类型 基本类型 boolean, char, 封装 (wrappers) 类 (class) 定义 class MyType { int i;

More information

OOP with Java 通知 : Project 2 提交时间 : 3 月 15 日晚 9 点

OOP with Java 通知 : Project 2 提交时间 : 3 月 15 日晚 9 点 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 : Project 2 提交时间 : 3 月 15 日晚 9 点 复习 : Java 类型 基本类型 boolean, char, 封装 (wrappers) 类 (class) 定义 class MyType { int i; double d; 数据 (Fields) char c; void set(double

More information

chp6.ppt

chp6.ppt Java 软 件 设 计 基 础 6. 异 常 处 理 编 程 时 会 遇 到 如 下 三 种 错 误 : 语 法 错 误 (syntax error) 没 有 遵 循 语 言 的 规 则, 出 现 语 法 格 式 上 的 错 误, 可 被 编 译 器 发 现 并 易 于 纠 正 ; 逻 辑 错 误 (logic error) 即 我 们 常 说 的 bug, 意 指 编 写 的 代 码 在 执 行

More information

Microsoft Word - 第3章.doc

Microsoft Word - 第3章.doc 第 3 章 求职者在介绍自己的基本情况时不必 从头说起, 比如, 不必介绍自己所具有的人的一般属性等, 因为人们已经知道求职者肯定是一个人, 已经具有了人的一般属性, 求职者只要介绍自己独有的属性就可以了 当准备编写一个类的时候, 发现某个类有我们所需要的成员变量和方法, 如果想复用这个类中的成员变量和方法, 即在所编写的类中不用声明成员变量就相当有了这个成员变量, 不用定义方法就相当有了这个方法,

More information

目 录 实 验 一 : 熟 悉 Java 开 发 环 境... 1 实 验 二 : 类 与 面 向 对 象... 7 实 验 三 : 继 承 和 多 态... 13 实 验 四 : 异 常 处 理... 18 实 验 五 : 流 文 件 及 基 于 文 本 的 应 用... 23

目 录 实 验 一 : 熟 悉 Java 开 发 环 境... 1 实 验 二 : 类 与 面 向 对 象... 7 实 验 三 : 继 承 和 多 态... 13 实 验 四 : 异 常 处 理... 18 实 验 五 : 流 文 件 及 基 于 文 本 的 应 用... 23 Java 程 序 设 计 实 验 指 导 书 商 丘 学 院 计 算 机 科 学 与 技 术 学 院 张 艳 晓 目 录 实 验 一 : 熟 悉 Java 开 发 环 境... 1 实 验 二 : 类 与 面 向 对 象... 7 实 验 三 : 继 承 和 多 态... 13 实 验 四 : 异 常 处 理... 18 实 验 五 : 流 文 件 及 基 于 文 本 的 应 用... 23 实 验

More information

PowerPoint Presentation

PowerPoint Presentation 第 3 章 类 类的继承和接口 3.1 类 3.2 包的创建和使用 源文件结构 3.3 类的继承和多态 3.4 接口和接口的实现 3.5 内部类和匿名内部类 3.1 类 1 Java 中类的定义格式 : [ 类的修饰符 ] class 类名 [extends 父类名 ]{ 变量声明 ; 构造方法定义 ; 其他方法定义 ; 2 创建一个类的对象的格式 : 类名对象名 =new 构造函数 ( 实际参数

More information

<4D F736F F D204A617661B3CCD0F2C9E8BCC6D3EBCAB5BCF9BDCCB3CCA3A8B5DA32B0E6A3A920B5DA35D5C22E646F63>

<4D F736F F D204A617661B3CCD0F2C9E8BCC6D3EBCAB5BCF9BDCCB3CCA3A8B5DA32B0E6A3A920B5DA35D5C22E646F63> 第 5 章 类类和对象和对象 教学目标 : 掌握类的构造方法的定义 作用, 以及如何实现类的构造方法 掌握如何创建类对象 如何使用类对象 掌握静态成员和实例成员的使用方法, 以及二者之间的区别 掌握类成员的访问权限的设置方法以及使用原则 教学重点 : 本章首先要求读者掌握对象的定义和引用的方法, 在此基础上深入理解静态成员和实例成员的定义及其应用 方法重载及其作用, 类的封装和访问控制权限 5.1

More information

Microsoft PowerPoint - L17_Inheritance_v4.pptx

Microsoft PowerPoint - L17_Inheritance_v4.pptx C++ Programming Lecture 17 Wei Liu ( 刘 威 ) Dept. of Electronics and Information Eng. Huazhong University of Science and Technology May. 2015 Lecture 17 Chapter 20. Object-Oriented Programming: Inheritance

More information

The Embedded computing platform

The Embedded computing platform 嵌入式系統及實驗 Embedded System and Experiment 詹曉龍 長庚大學電機系 Java 的類別與物件 : 宣告類別 建構子 public class Customer { private String name; private String address; // Customer 類別宣告 // 成員資料 public int age; // 建構子 : 使用參數設定成員資料初始值

More information

运算符重载 为什么要 运算符重载 那些运算符可以重载, 哪些不可以 如何实现运算符重载 实现方式 : 成员函数与非成员函数 类型转换 怎样实现对象与基本数据类型数据的运算 2

运算符重载 为什么要 运算符重载 那些运算符可以重载, 哪些不可以 如何实现运算符重载 实现方式 : 成员函数与非成员函数 类型转换 怎样实现对象与基本数据类型数据的运算 2 第十一讲 运算符重载 与类型转换 运算符重载 为什么要 运算符重载 那些运算符可以重载, 哪些不可以 如何实现运算符重载 实现方式 : 成员函数与非成员函数 类型转换 怎样实现对象与基本数据类型数据的运算 2 为什么要运算符重载 预定义的运算符只针对基本数据类型, 若要对类的对象进行类似的运算, 需要重新定义运算符的功能 运算符重载实质就是函数重载 : 对已有的运算符赋予多重含义, 使得同一个运算符作用于不同类型的数据时导致不同的行为

More information

Microsoft PowerPoint - 04-Inheritance.ppt

Microsoft PowerPoint - 04-Inheritance.ppt 继承 派生与多态性 1 本章主要内容 类的继承与派生 类成员的访问控制 简单继承与多重继承 派生类的构造 析构函数 多态性 2 1 类的继承与派生 保持已有类的特性, 并在其基础上产生新的类, 称新类继承了已有类的特征, 或称已有类派生出新类 被继承的已有类称为基类 ( 或父类 ) 派生出的新类称为派生类 派生类将自动继承基类的所有特性 ( 属性和方法 ) 派生类可以定义新的特性 ( 属性和方法 )

More information

教学内容 1 2 类和对象 Java 面向对象特性

教学内容 1 2 类和对象 Java 面向对象特性 2013-2014 学年度第二学期课程 C 语言程序设计 Java 语言程序设计面向过程编程方法 编程方法学 新疆农业大学计算机与信息工程学院 陈燕红 :cyh@xjau.edu.cn 教学内容 1 2 类和对象 Java 面向对象特性 3 4 5 6 Java 程序的执行过程 经典的 Java 工具包是 JDK 可以用任何文本编辑器, 如记事本, 都可以直接编写 Java 程序然后用 JDK 的命令编译和运行.

More information

KillTest 质量更高 服务更好 学习资料 半年免费更新服务

KillTest 质量更高 服务更好 学习资料   半年免费更新服务 KillTest 质量更高 服务更好 学习资料 http://www.killtest.cn 半年免费更新服务 Exam : 1Z0-854 Title : Java Standard Edition 5 Programmer Certified Professional Upgrade Exam Version : Demo 1 / 12 1.Given: 20. public class CreditCard

More information

2. AOP 底层技术实现 小风 Java 实战系列教程 关键词 : 代理模式 代理模型分为两种 : 1) 接口代理 (JDK 动态代理 ) 2) 子类代理 (Cglib 子类代理 ) 需求 :CustomerService 业务类, 有 save,update 方法, 希望在 save,updat

2. AOP 底层技术实现 小风 Java 实战系列教程 关键词 : 代理模式 代理模型分为两种 : 1) 接口代理 (JDK 动态代理 ) 2) 子类代理 (Cglib 子类代理 ) 需求 :CustomerService 业务类, 有 save,update 方法, 希望在 save,updat 本章学习目标 小风 Java 实战系列教程 AOP 思想概述 AOP 底层技术实现 AOP 术语介绍 SpringAOP 的 XML 方式 HelloWorld SpringAOP 的 XML 方式配置细节 SpringAOP 的注解方式 SpringAOP 的零配置方式 1. AOP 思想概述 1.1. AOP 思想简介 1.2. AOP 的作用 2. AOP 底层技术实现 小风 Java 实战系列教程

More information

JavaIO.PDF

JavaIO.PDF O u t p u t S t ream j a v a. i o. O u t p u t S t r e a m w r i t e () f l u s h () c l o s e () public abstract void write(int b) throws IOException public void write(byte[] data) throws IOException

More information

Java java.lang.math Java Java.util.Random : ArithmeticException int zero = 0; try { int i= 72 / zero ; }catch (ArithmeticException e ) { // } 0,

Java java.lang.math Java Java.util.Random : ArithmeticException int zero = 0; try { int i= 72 / zero ; }catch (ArithmeticException e ) { // } 0, http://debut.cis.nctu.edu.tw/~chi Java java.lang.math Java Java.util.Random : ArithmeticException int zero = 0; try { int i= 72 / zero ; }catch (ArithmeticException e ) { // } 0, : POSITIVE_INFINITY NEGATIVE_INFINITY

More information

Microsoft PowerPoint - 08_OO_CJC.ppt

Microsoft PowerPoint - 08_OO_CJC.ppt C++ 中的 Hello World! C 程序设计语言 第 8 章 OO 与 C++ Java C# 孙志岗 sun@hit.edu.cn http://sunner.cn 兼容 C 语言的 : #include int main() printf("hello,, world!\n"); return 0; 更具 C++ 味道的 : #include int

More information

Java程序设计复习题

Java程序设计复习题 JAVA 程序设计复习题 一 单项选择题 1. 在基于 UDP 的通信方式下, 实现接收数据包的类是 A.Socket 类 B.ServerSocket 类 C.DatagramPacket 类 D.DatagramSocket 类 2. 下面哪些是 java 语言中的关键字? A.sizeof B.abstract C.NULL D.Native 3.paint() 方法使用的参数是 A.Graphics

More information

《C语言程序设计》第2版教材习题参考答案

《C语言程序设计》第2版教材习题参考答案 教材 C 语言程序设计 ( 第 2 版 ) 清华大学出版社, 黄保和, 江弋编著 2011 年 10 月第二版 ISBN:978-7-302-26972-4 售价 :35 元 答案版本 本习题答案为 2012 年 2 月修订版本 一 选择题 1. 设已定义 int a, * p, 下列赋值表达式中正确的是 :C)p = &a A. *p = *a B. p = *a C.p = &a D. *p =

More information

Mac Java import com.apple.mrj.*;... public class MyFirstApp extends JFrame implements ActionListener, MRJAboutHandler, MRJQuitHandler {... public MyFirstApp() {... MRJApplicationUtils.registerAboutHandler(this);

More information

内 容 简 介 本 书 是 一 本 关 于 语 言 程 序 设 计 的 教 材, 涵 盖 了 语 言 的 基 本 语 法 和 编 程 技 术, 其 中 包 含 了 作 者 对 语 言 多 年 开 发 经 验 的 总 结, 目 的 是 让 初 学 的 读 者 感 受 到 语 言 的 魅 力, 并 掌

内 容 简 介 本 书 是 一 本 关 于 语 言 程 序 设 计 的 教 材, 涵 盖 了 语 言 的 基 本 语 法 和 编 程 技 术, 其 中 包 含 了 作 者 对 语 言 多 年 开 发 经 验 的 总 结, 目 的 是 让 初 学 的 读 者 感 受 到 语 言 的 魅 力, 并 掌 语 言 程 序 设 计 郑 莉 胡 家 威 编 著 清 华 大 学 逸 夫 图 书 馆 北 京 内 容 简 介 本 书 是 一 本 关 于 语 言 程 序 设 计 的 教 材, 涵 盖 了 语 言 的 基 本 语 法 和 编 程 技 术, 其 中 包 含 了 作 者 对 语 言 多 年 开 发 经 验 的 总 结, 目 的 是 让 初 学 的 读 者 感 受 到 语 言 的 魅 力, 并 掌 握 语

More information

前言 C# C# C# C C# C# C# C# C# microservices C# More Effective C# More Effective C# C# C# C# Effective C# 50 C# C# 7 Effective vii

前言 C# C# C# C C# C# C# C# C# microservices C# More Effective C# More Effective C# C# C# C# Effective C# 50 C# C# 7 Effective vii 前言 C# C# C# C C# C# C# C# C# microservices C# More Effective C# More Effective C# C# C# C# Effective C# 50 C# C# 7 Effective vii C# 7 More Effective C# C# C# C# C# C# Common Language Runtime CLR just-in-time

More information

untitled

untitled 1 7 7.1 7.2 7.3 7.4 7.5 2 7.1 VFT virtual 7.1 3 1 1. 2. public protected public 3. VFT 4. this const volatile 4 2 5. ( ) ( ) 7.1 6. no-static virtual 7.2 7. inline 7.3 5 3 8. this this 9. ( ) ( ) delete

More information

Microsoft Word - ch04三校.doc

Microsoft Word - ch04三校.doc 4-1 4-1-1 (Object) (State) (Behavior) ( ) ( ) ( method) ( properties) ( functions) 4-2 4-1-2 (Message) ( ) ( ) ( ) A B A ( ) ( ) ( YourCar) ( changegear) ( lowergear) 4-1-3 (Class) (Blueprint) 4-3 changegear

More information

C++ 程序设计 OJ2 - 参考答案 MASTER 2019 年 5 月 3 日 1

C++ 程序设计 OJ2 - 参考答案 MASTER 2019 年 5 月 3 日 1 C++ 程序设计 OJ2 - 参考答案 MASTER 2019 年 5 月 3 日 1 1 PERSON 1 Person 题目描述 编写程序, 定义一个基类 Person, 包含 name 和 age 两个数据成员 ; 再由它派生出学生类 Student 和教师类 Teacher, 其中学生类添加学号 no 数据, 教师类添加职称 title 数据 ; 要求每个类均有构造函数 析构函数和显示数据的函数

More information

Microsoft Word - 正文.doc

Microsoft Word - 正文.doc 第 5 章深入讨论类 教学要求 理解引用赋值, 类的静态成员, 重载的概念, 继承 抽象类 接口的概念, 包的作用, 访问控制修饰符的作用 掌握对象的创建与使用, 方法的定义和调用, 构造方法的使用, 方法重载的使用, 通过继承创建新类, 定义和使用接口, 使用包, 使用 import 5.1 对象的创建与销毁 面向对象程序设计的核心是对象, 程序是一系列对象的组合 单个对象能够实现的功能 是有限的,

More information

本章学习目标 小风 Java 实战系列教程 SpringMVC 简介 SpringMVC 的入门案例 SpringMVC 流程分析 配置注解映射器和适配器 注解的使用 使用不同方式的跳转页面 1. SpringMVC 简介 Spring web mvc

本章学习目标 小风 Java 实战系列教程 SpringMVC 简介 SpringMVC 的入门案例 SpringMVC 流程分析 配置注解映射器和适配器 注解的使用 使用不同方式的跳转页面 1. SpringMVC 简介 Spring web mvc 本章学习目标 SpringMVC 简介 SpringMVC 的入门案例 SpringMVC 流程分析 配置注解映射器和适配器 配置视图解析器 @RequestMapping 注解的使用 使用不同方式的跳转页面 1. SpringMVC 简介 Spring web mvc 和 Struts2 都属于表现层的框架, 它是 Spring 框架的一部分, 我们可 以从 Spring 的整体结构中看得出来 :

More information

Microsoft Word - JCS5.doc

Microsoft Word - JCS5.doc 第 5 章进一步讨论对象和类 5.1 抽象数据类型 5.1.1 概述 绝大多数程序设计语言都预定义了一些基本数据类型, 并相应定义了对那些类型的实例执行的操作 比如, 对整型 实型等数值类型, 有加 减 乘 除等操作 ; 对逻辑类型, 有逻辑与 逻辑或 逻辑非等操作 对于用户自定义的复合数据类型, 需要由程序员自己定义一些方法, 对该类型的实例进行所需的操作 在早期许多程序设计语言中, 复合数据类型及其相关操作的代码之间没有特殊的联系

More information

<4D6963726F736F667420506F776572506F696E74202D20B5DA3035D5C220C3E6CFF2B6D4CFF3B8DFBCB6B3CCD0F2C9E8BCC6>

<4D6963726F736F667420506F776572506F696E74202D20B5DA3035D5C220C3E6CFF2B6D4CFF3B8DFBCB6B3CCD0F2C9E8BCC6> Java 程 序 设 计 教 学 课 件 河 南 农 业 大 学 信 管 学 院 计 算 机 系 河 南 农 业 大 学 信 管 学 院 计 算 机 系 高 级 语 言 程 序 设 计 课 程 组 第 5 章 面 向 对 象 高 级 程 序 设 计 主 要 内 容 5.1 继 承 5.2 多 态 性 5.3 抽 象 类 和 抽 象 方 法 5.4 接 口 5.5 内 部 类 和 匿 名 类 5.1

More information

NOWOER.OM m/n m/=n m/n m%=n m%n m%=n m%n m/=n 4. enum string x1, x2, x3=10, x4, x5, x; 函数外部问 x 等于什么? 随机值 5. unsigned char *p1; unsigned long *p

NOWOER.OM m/n m/=n m/n m%=n m%n m%=n m%n m/=n 4. enum string x1, x2, x3=10, x4, x5, x; 函数外部问 x 等于什么? 随机值 5. unsigned char *p1; unsigned long *p NOWOER.OM /++ 程师能 评估. 单项选择题 1. 下 描述正确的是 int *p1 = new int[10]; int *p2 = new int[10](); p1 和 p2 申请的空间 的值都是随机值 p1 和 p2 申请的空间 的值都已经初始化 p1 申请的空间 的值是随机值,p2 申请的空间 的值已经初始化 p1 申请的空间 的值已经初始化,p2 申请的空间 的值是随机值 2.

More information

试卷代号 : 座位号 中央广播电视大学 学年度第一学期 " 开放本科 " 期末考试 面向对象程序设计 ( 本 ) 试题 2011 年 1 月 题号 一 一 一四总分 一 分数 得分 评卷人 - 单选题, 在括号内填写正确的选项编号 { 每小题 2 分, 共

试卷代号 : 座位号 中央广播电视大学 学年度第一学期  开放本科  期末考试 面向对象程序设计 ( 本 ) 试题 2011 年 1 月 题号 一 一 一四总分 一 分数 得分 评卷人 - 单选题, 在括号内填写正确的选项编号 { 每小题 2 分, 共 试卷代号 : 1 2 9 7 座位号 中央广播电视大学 2 0 1 0 2011 学年度第一学期 " 开放本科 " 期末考试 面向对象程序设计 ( 本 ) 试题 2011 年 1 月 题号 一 一 一四总分 一 分数 得分 评卷人 - 单选题, 在括号内填写正确的选项编号 { 每小题 2 分, 共 2 0 分 } 1. Java 是一门 ( ) 语言 A. 机器 B. 汇编 C. 面向过程的高级 D.

More information

untitled

untitled How to using M-Power Report API M-Power Report API 力 了 M-Power Report -- Java (Library) M-Power Report API 行 Java M-Power Report M-Power Report API ( 30 ) PDF/HTML/CSV/XLS JPEG/PNG/SVG 料 料 OutputStream

More information

《计算概论》课程 第十九讲 C 程序设计语言应用

《计算概论》课程 第十九讲  C 程序设计语言应用 Java 高级技术 课程第二讲 Java 语言的面向对象特性 (3) 李戈 北京大学信息科学技术学院软件研究所 2010 年 3 月 21 日 进入一个新的主题 抽象类 vs. 接口 抽象类的引出 抽象类 现实世界中一些没有具体对象的纯粹抽象概念, 例如, 鸟 鱼 灯 树 动物 ; 抽象类用于建模现实世界中的纯粹抽象概念 ; 定义方法 : 使用保留字 abstract public abstract

More information

OOP with Java 通知 Project 2 提交时间 : 3 月 21 日晚 9 点 作业提交格式 学习使用 文本编辑器 cmd, PowerShell (Windows), terminal(linux, Mac)

OOP with Java 通知 Project 2 提交时间 : 3 月 21 日晚 9 点 作业提交格式 学习使用 文本编辑器 cmd, PowerShell (Windows), terminal(linux, Mac) OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 2 提交时间 : 3 月 21 日晚 9 点 作业提交格式 学习使用 文本编辑器 cmd, PowerShell (Windows), terminal(linux, Mac) 复习 面向对象编程 将实际问题分解成不同的对象 不的对象提供不同的服务 对象之间可以传递消息 例子小李深夜

More information

Microsoft Word - 第6章.doc

Microsoft Word - 第6章.doc 100 第 6 章 继 承 第 6 章 继 承 继 承 是 面 向 对 象 编 程 的 重 要 特 征 之 一 顾 名 思 义, 继 承 就 是 在 现 有 类 的 基 础 上 构 建 新 类 以 满 足 新 的 要 求 在 继 承 过 程 中, 新 的 类 继 承 原 来 的 方 法 和 实 例 变 量, 并 且 能 添 加 自 己 的 方 法 和 实 例 变 量 在 本 章 中 主 要 讲 解

More information

public String getsex() { return ssex; public int getage() { return sage; public int getjava() { return sjava; public static void main(string[] args) {

public String getsex() { return ssex; public int getage() { return sage; public int getjava() { return sjava; public static void main(string[] args) { 第七章类和对象 实验目的 (1) 熟练掌握类 类方法的定义 (2) 明确类与对象的关系掌握关键字 new 的引用 (3) 掌握对象的引用 (4) 掌握构造方法及一般方法的使用 实验范例 例 1:( 类的构造 ) 定义一个表示学生信息的类 Student, 要求如下 :( 有关类的编程 ) (1) 类 Student 的成员变量 : sno 表示学号 ;sname 表示姓名 ;ssex 表示性别 ;sage

More information

1 4 1.1 4 1.2..4 2..4 2.1..4 3.4 3.1 Java.5 3.1.1..5 3.1.2 5 3.1.3 6 4.6 4.1 6 4.2.6 5 7 5.1..8 5.1.1 8 5.1.2..8 5.1.3..8 5.1.4..9 5.2..9 6.10 6.1.10

1 4 1.1 4 1.2..4 2..4 2.1..4 3.4 3.1 Java.5 3.1.1..5 3.1.2 5 3.1.3 6 4.6 4.1 6 4.2.6 5 7 5.1..8 5.1.1 8 5.1.2..8 5.1.3..8 5.1.4..9 5.2..9 6.10 6.1.10 Java V1.0.1 2007 4 10 1 4 1.1 4 1.2..4 2..4 2.1..4 3.4 3.1 Java.5 3.1.1..5 3.1.2 5 3.1.3 6 4.6 4.1 6 4.2.6 5 7 5.1..8 5.1.1 8 5.1.2..8 5.1.3..8 5.1.4..9 5.2..9 6.10 6.1.10 6.2.10 6.3..10 6.4 11 7.12 7.1

More information