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

Size: px
Start display at page:

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

Transcription

1 第三章面向对象基本特性 面向对象程序设计是一种先进的编程思想, 更加容易解决复杂的问题 面向对象系统最突出的特性是封装性 继承性和多态性 学习完本章节, 您能够 : 理解封装的概念 实现对象封装特性 实现继承特性 使用接口 掌握对象的多态性 任务 3.1 保护个人数据 情境描述 Tom 设计的 A 类员工类, 外部可以直接访问它的成员变量, 在现实社会中, 一个对象的 某些属性外界是不可以得知的, 因此需要针对个人的数据成员进行隐藏保护 为了保护 A 类 员工的个人数据, 他需要完成以下任务 : (1) 设置访问区分符 (2) 设置 getter 和 setter 情景分析 针对数据成员进行封装是面向对象的基本特性,java 提供 public protected,private 及包 封装四种, 封装可以针对数据成员, 也可以针对类 同时 java 也提供 getter 和 setter 方法对成 员变量进行读写封装, 进一步提高数据成员封装性 解决方案 (1) 打开 Eclipse, 选择 Task2_2, 复制之后粘贴为 Task3_1 项目 (2) 选择 Task3_1 项目, 打开 EmployeeA 类, 针对当前 EmployeeA 的成员变量进行访问 区分符限定, 一般情况下, 针对成员变量的封装采取 private 封装, 针对成员方法的封装, 采 取 public 封装 封装后的代码如下 : public class EmployeeA { private String employeeno; private String employeename; private String employeegender; private String employeedepartment; private String employeepos; // 工号 // 姓名 // 性别 // 所属部门 // 职务

2 第三章面向对象基本特性 49 private String employeetitlepos; private Date employeeentrydate; // 职称 // 入职日期 (3) 对 EmployeeA 类的数据成员进行 getter 和 setter 方法封装 在 Eclipse 中, 可以执行 Source 菜单下的 Generate Getters and Setters 选项, 进行访问 getter 和 setter 封装, 如 图 3 1 所示 图 3 1 创建 getter 和 setter 方法 设置了 getter 和 setter 的类 EmployeeA 的成员如下 : public class EmployeeA { private String employeeno; // 工号 private String employeename; // 姓名 private String employeegender; // 性别 private String employeedepartment; // 所属部门 private String employeepos; // 职务 private String employeetitlepos; // 职称 private Date employeeentrydate; public String getemployeeno(); public void setemployeeno(string employeeno); public String getemployeename(); public void setemployeename(string employeename); public String getemployeegender(); public void setemployeegender(string employeegender); public String getemployeedepartment(); public void setemployeedepartment(string employeedepartment);

3 50 Java 程序设计 public String getemployeepos(); public void setemployeepos(string employeepos); public String getemployeetitlepos(); public void setemployeetitlepos(string employeetitlepos); public Date getemployeeentrydate(); public void setemployeeentrydate(date employeeentrydate); public int getworkyears(); public void display(); (4) 修改员工入职日期的 setter 方法 : employeeentrydate / public void setemployeeentrydate(string employeeentrydate) { try { SimpleDateFormat fmt = new SimpleDateFormat("yyyy MM dd"); this.employeeentrydate = fmt.parse(employeeentrydate); catch (ParseException e) { e.printstacktrace(); (5) 修改 Menus 类中的 employeemenu 方法, 通过 setter 方法设置成员变量的值 具体 代码如下 : 员工信息操作菜单 / public static void employeemenu() { // 略 // 以下是方法中 case 1 的部分修改结果 EmployeeA objtom = new EmployeeA(); System.out.print(" 请输入员工号 :"); objtom.setemployeeno(in.next()); System.out.print(" 请输入员工姓名 :"); objtom.setemployeename(in.next()); System.out.print(" 请输入员工性别 :"); objtom.setemployeegender(in.next()); System.out.print(" 请输入所属部门 :"); objtom.setemployeedepartment(in.next()); System.out.print(" 请输入员工职务 :"); objtom.setemployeepos(in.next()); System.out.print(" 请输入员工职称 :"); objtom.setemployeetitlepos(in.next()); System.out.print(" 请输入员工入职日期, 格式 yyyy MM dd:"); objtom.setemployeeentrydate(in.next());

4 第三章面向对象基本特性 51 (6) 完成封装及其访问 知识总结 1. 封装一个对象的变量构成这个对象的核心, 一般不将其对外公开, 而是将其变量处理的方法对外公开, 这样变量就被隐藏起来, 这种将对象的变量置于方法的保护之下的方法, 被称为封装 封装是将对象的状态和行为捆绑在一起的机制, 通过对对象的封装, 数据和基于数据的操作封装在一起, 使其构成一个不可分割的独立实体, 数据被保护在对象的内部, 尽可能地隐藏内部的细节, 只保留一些对外接口使之与外部发生联系 封装实际上就是对于访问权限的控制操作 2. 访问权限控制在 Java 中, 针对类的每个成员变量和方法都有访问权限的控制 Java 支持四种用于成员变量和方法的访问级别 :public protected private 和包访问控制 这种访问权限控制实现了一定范围内的隐藏 表 3 1 列出了不同范围的访问权限 表 3 1 类成员访问权限作用范围 访问权限 作用范围 同一个类中同一个包中不同包中的子类不同包中的非子类 private 包访问控制 protected public 注 : 表中 表示可以访问, 表示不可以访问 (1)private 类中限定为 private 的成员变量和成员方法只能被这个类本身的方法访问, 它不能在类外 通过名字来访问 private 的访问权限有助于对客户隐藏类的实现细节, 减少错误, 提高程序 的可修改性 建议把一个类中所有的实例变量设为 private, 必要时, 用 public 方法设定或读取实例变 量的值 类中的一些辅助方法也可以设为 private 访问权限, 因为这些方法没有必要让外界知 道, 对他们的修改也不会影响程序的其他部分 这样类的编程人员就控制了如何操纵类的数据 另外, 对于构造方法, 也可以限定它为 private 如果一个类的构造方法声明为 private, 则其他类不能通过构造方法生成该类的一个对象, 但可以通过该类中一个可以访问的方法间接 地生成一个对象实例 (2) 包访问控制 如果在成员变量和成员方法前不加任何访问权限修饰符, 则默认为包访问控制 这样同 一包内的其他所有类都能访问该成员, 但对包外的所有类就不能访问 包访问控制允许将相关 的类都组合到一个包里, 使它们相互间方便进行沟通 (3)protected

5 52 Java 程序设计 类中限定为 protected 的成员可以被这个类本身 它的子类 ( 包括同一包中的和不同包中 的子类 ) 以及同一包中所有其他的类访问 如果一个类有子类, 而不管子类是否与自己在同一 包中, 都想让子类能够访问自己的某些成员, 就可以将这些成员声明为 protected 访问类型 (4)public 类中声明为 public 的成员可以被所有的类访问 public 的主要用途是让类的客户了解类提 供的服务, 即类的公共接口, 而不必关心类是如何完成其任务的 将类的实例变量声明为 private, 并将类的方法声明为 public 就可以方便程序的调试, 因为这样可以使数据操作方面的 问题局限在类的方法中 3.setter 和 getter 方法 前面提到, 一个类的成员变量一旦被定义为 prviate, 就不能被其他类访问, 那么外部如 何实现对这些成员变量的操纵呢? 一个好的办法就是为 private 成员变量提供一个公有的访问 方法, 外界通过公有的方法来访问它 Java 提供访问器方法, 即 getter 和 setter 方法, 通过访 问器方法, 其他对象可以读取和设置 private 成员变量的值 这样做的好处是 private 成员变量 可以得到保护, 防止错误的操作, 因为在访问器方法中可以判断操作是否合法 (1)getter 方法 : 读取对象的属性值, 只是简单的返回 语法格式为 : public attributetype getattributename(); 其中,AttributeName 是读取成员变量的名字, 首字母要大写, 方法没有参数, 返回类型 和被读取成员变量的类型一致 (2)setter 方法 : 设置对象的属性值, 可以增加一些检查的措施 语法格式为 : public void setattributename(attributetype parametername); 其中,AttributeName 是成员变量的名字, 首字母要大写, 方法参数类型与要设置的成员 变量的类型一致, 方法没有返回值 例 3 1 getter 和 setter 方法的使用 class Student { // 类的声明 private String name; // 成员变量 private int age; public void setname(string name) { this.name = name; public void setage(int age) { if (age >= 0 && age <= 200) { // 设置 name 属性值 // 设置正确的年龄范围 this.age = age; else System.out.println("error,age between 0 and 200"); public String getname() { // 读取 name 属性值 return name; public int getage() { return age; // 读取 age 属性值

6 第三章面向对象基本特性 53 public class StudentObjectDemo { public static void main(string[] args) { Student s = new Student(); // 声明和创建对象 s.setname(" 张三 "); // 调用 setter 方法 s.setage(30); System.out.println(" 姓名 :" + s.getname() + ", 年龄 :" + s.getage()); // 调用 getter 方法 从本例中可以看到, 每一个 private 成员变量都有一对 getter 和 setter 方法, 在 setage 方 法中对输入的变量值进行了验证, 如果不符合要求则拒绝修改, 从而有效地保护了数据 应用实践 在 Java 中, 封装的概念比较多, 这里只是列出了通过 private 等访问权限的控制来实现数据的封装, 更多的应用在以后会陆续地接触到 通过本实践, 更进一步加深对封装的理解 1. 利用 setter 和 getter 方法, 修改应用实践 2.2.5, 声明一个矩形类, 定义成员变量和方法, 并创建一个矩形对象, 通过设置长和宽, 输出其周长和面积 对于其中长和宽设置值验证机制, 只能为正数 2. 扩展 : 针对 B 类员工及 C 类员工进行封装及其封装访问 任务 3.2 类的继承性 情境描述 代码复用是面向对象的重要特性之一,Tom 所定义的 EmployeeA,EmployeeB 及 EmployeeC 三个类均存在相同的成员变量及成员方法, 当前的类定义方式违背了复用的原则, 为了提高代码的复用,Tom 需要完成以下任务 : (1) 理解继承性 (2) 定义基类 (3) 从基类派生子类 (4) 定义抽象方法 问题分析 Java 语句是纯面向对象语言, 因此实现代码复用的方法就是继承, 将当前的 A B C 三类员工的功能属性和共同行为抽象定义为基类 Employee 类, 由 Employee 类派生出子类 EmployeeA EmployeeB EmployeeC 就 A B C 三类员工同样存在相同的行为, 例如 display 方法, 他们的方法名称相同, 但是实现过程不一样, 在解决 display 行为统一时, 可以在基类 Employee 中声明 display 方法, 在子类中重新定义

7 54 Java 程序设计 解决方案 (1) 打开 Eclipse, 选择 Task3_1 项目, 进行复制, 粘贴形成新项目 Task3_2 (2) 选中 Task3_2 项目, 打开 EmployeeA 类, 选择菜单 Refactor Extract SuperClass.., 进入图 3 2 所示界面, 在 Superclass name 后输入 Employee, 在 Types to extract a superclass from 部分, 单击 Add 按钮, 添加 EmployeeB 和 EmployeeC, 最后勾选需要提取到基类的成员变量及成员方法 图 3 2 重构父类图 单击 Next 进行重构类勾选, 选中 EmployeeA EmployeeB 及 EmployeeC 需要重构的 字段, 如图 3 3 所示 (3) 单击 Finish 按钮, 重构后形成 Employee 类及其字段 EmployeeA EmployeeB EmployeeC 1)Employee 类 //Employee.java public class Employee { protected String employeeno; protected String employeename; protected String employeegender; protected String employeedepartment; protected String employeepos; public String getemployeeno(); public void setemployeeno(string employeeno);

8 第三章面向对象基本特性 55 public String getemployeename() ; public void setemployeename(string employeename) ; public String getemployeegender() ; public void setemployeegender(string employeegender) ; public String getemployeedepartment(); public void setemployeedepartment(string employeedepartment); public String getemployeepos() ; public void setemployeepos(string employeepos); 图 3 3 重构字段 2)EmployeeA 子类 //EmployeeA.java public class EmployeeA extends Employee { private String employeetitlepos; private Date employeeentrydate; public String getemployeetitlepos(); public void setemployeetitlepos(string employeetitlepos) ; public Date getemployeeentrydate() ; public void setemployeeentrydate(string employeeentrydate) ; public int getworkyears(); public void display(); 3)EmployeeB 子类

9 56 Java 程序设计 //EmployeeB.java public class EmployeeB extends Employee { private String employeetitlepos;// 职称 private int employeeworktimes;// 月工作时间 public String getemployeetitlepos(); public void setemployeetitlepos(string employeetitlepos) ; public int getemployeeworktimes(); public void setemployeeworktimes(int employeeworktimes); public void display() ; 4)EmployeeC 子类 //EmployeeC.java public class EmployeeC extends Employee { private int employeeworktimes;// 月工作时间 public int getemployeeworktimes(); public void setemployeeworktimes(int employeeworktimes); public void display() ; (4) 修改 Employee 类为抽象类, 再添加抽象方法 display 具体声明如下: public abstract class Employee { public abstract void display();// 声明统一的抽象方法 知识总结 1. 继承的概念 继承性是面向对象程序设计的一个重要特征 通过继承, 子类可以继承基类的属性和方 法, 还可以加以扩展, 或者修改原有的方法, 从而提高程序的扩展性和灵活性 通过继承, 子 类可以复用基类的代码, 从而提高编程的效率 其中, 被继承的类称为基类 超类或父类 (super class); 继承的类称为继承类或子类, 它 在基类的基础上增加新的属性 方法 ; 一个父类可以同时拥有多个子类, 但 Java 中不支持多 重继承, 所以一个类只能有一个直接父类 2. 类的继承 (1) 子类的声明 在 Java 语言中, 所有的类都是直接或间接地继承自 java.lang.object 类 通常在类的声明 中加入 extends 关键字来创建一个类的子类, 其形式如下 : [ 修饰符 ] class 子类类名 extends 父类类名 { // 语句体 如果没有 extends 关键字指明基类, 则默认基类是 java.lang.object 如前面章节中创建 的类 创建成功后, 子类实际拥有的成员变量和方法有 : 1 子类本身拥有的成员变量和方法

10 第三章面向对象基本特性 57 2 基类及其祖先的 public 和 protected 成员变量和方法 3 如果子类与基类在同一个包中, 则包括基类的 (default) 成员变量和方法 ; 如果不在同 一个包中, 则不包括基类的 (default) 成员变量和方法 4 不包括基类的 private 成员变量和方法 子类也不能访问基类的 private 成员变量和方法 (2) 成员变量的隐藏和成员方法的覆盖 如果子类中声明了与基类同名的成员变量, 则在子类中基类的成员变量被隐藏 子类仍 然继承了基类的成员变量, 只是将成员变量的名字隐藏, 使其不可直接被访问 如果子类定义的方法与基类中的方法具有相同的名字 相同的参数表和相同的返回类型, 则基类的方法被重写, 在子类中基类的成员方法被覆盖 和方法 子类通过成员变量的隐藏和成员方法的覆盖可以把基类的属性和方法改变为自身的属性 例 3 2 隐藏成员变量和覆盖成员方法 class Stu { String name; int age; int number; public void display() { System.out.println("name:" + name + "\n" + "age:" + age); class GraduateStu extends Stu { int number; String mentorname; // 声明子类 GraduateStu // 隐藏了父类的 number 属性 // 增添了新的 mentorname 属性 public void display() { // 覆盖了父类的方法 System.out.println("name:" + name + "\n" + "age:" + age); System.out.println("his mentor is:" + mentorname); 注意 : 子类中不能覆盖基类中的 final 方法 ; 子类中必须覆盖基类中的 abstract 方法, 否则 子类也为抽象类 (3) 继承的特点 重用性 : 在继承关系中, 基类中已经存在的代码, 包括属性和方法, 可以继承到子类 中 可靠性 : 通过继承的方式利用 java API 类库及第三方类库, 可以提高代码的可靠性 扩展性 : 子类可以增添新的属性和方法, 加强子类的功能 通过继承来扩展现有程序 的功能, 比重新设计程序更容易一些 (4)super 关键字 如果子类隐藏了基类的成员变量或者覆盖了基类的成员方法, 而有时还需要使用父类中 的那些成员变量和方法, 这时就需要借助 Java 中的 super 关键字来实现对父类成员的访问

11 58 Java 程序设计 访问被隐藏的直接基类的同名成员变量 : super. 成员变量 访问直接基类中被覆盖的同名方法 : super. 成员方法 ([ 参数列表 ]) 访问直接基类的构造方法 : super([ 参数列表 ]) 注意 : 1 如果存在多层继承, 可以通过直接基类的方法来间接引用 ; 2 引用基类的构造方法时, 子类构造方法中 super() 语句必须是第一条语句 先初始化基 类, 再初始化子类 3 不能从非构造方法中引用基类的构造方法 4 如果不存在同名的成员变量或方法, 一般不需要用 super 关键字 (5)final 关键字 final 关键字可以修饰类 成员变量和方法中的参数 被 final 关键字修饰的类称为 final 类, 不能被继承, 即不能有子类 有时候出于安全性考 虑, 将一些类修饰为 final 类 如 String 类, 它对于编译器和解释器的正常运行有很重要的作 用, 对它不能轻易地改变, 因此它被修饰为 final 类 如果一个方法被修饰为 final 方法, 则这个方法不能被覆盖 如果一个成员变量被修饰为 final, 则它将成为常量, 且必须初始化, 不能再发生变化 如 :final double PI= ; 3. 抽象类 包含一个抽象方法的类称为抽象类, 抽象方法是只声明而未实现的方法, 所有的抽象方 法必须使用 abstract 关键字声明 声明抽象类的格式与声明类的格式相同, 但要用 abstract 修 饰符指明它是一个抽象类 定义抽象方法的语法格式与普通的方法有些不同 : abstract 返回类型方法名 ([ 参数列表 ]); 可以看出, 抽象方法没有方法体, 直接用分号结束 具体的抽象方法必须在子类中被实现 对于抽象类, 不能直接进行 new 关键字实例化的操作 但可以声明, 在声明抽象类时, 将规范其子类所应该有的方法 如果想使用抽象类, 则必须依靠子类, 抽象类是必须被子类继 承的, 而且子类需要实现抽象类中的全部抽象方法 因此, 抽象类不允许使用 final 关键字声 明, 因为被 final 声明的类不能有子类 抽象类的用途 : 通过对抽象类的继承可以实现代码的复用 ; 可以规范子类的行为 应用实践 通过本实践, 加深对继承的理解, 并综合运用抽象类等知识 利用抽象类, 完成继承的实现 : 求圆和矩形的面积 abstract class Shape { // 抽象类 public String color = "white"; abstract double area(); // 抽象方法 public String getcolor() {

12 第三章面向对象基本特性 59 return color; class CircleShape extends Shape { public double radius; public double area() { // 继承基类, 同时继承其属性和方法 // 声明自身独有的属性 // 必须实现 area() 方法 return Math.PI radius radius; class RectangleShape extends Shape { public double length; public double width; public double area() { // 必须实现 area() 方法 return length width; public class Practise3_2_5 { public static void main(string args[]) { RectangleShape r = new RectangleShape(); r.length = 10; r.width = 8; System.out.println(" 矩形的面积是 :" + r.area()); CircleShape c = new CircleShape(); c.radius = 5; System.out.println(" 圆的面积是 :" + c.area()); 任务 3.3 接口 情境描述在工资管理系统中, 所涉及到的员工信息 工资信息等均需要进行数据的显示及存储操作, 数据的显示和存储从计算机的结构上讲均是数据的输出, 数据显示是输出到显示器, 数据存储是输出到硬盘 针对不同对象的显示和输出行为, 从本质上讲, 属于同一行为, 只是实现手段不同而已 Tom 正在考虑如何利用 Java 语言来统一不同行为, 为了达到这个目的, 他需要完成以下任务 : (1) 定义接口及接口中的方法 (2) 实现接口及重写方法 问题分析在现实社会中, 很多不同的对象存在相同的行为, 例如飞的动作, 飞机可以飞, 鸟也可以飞 将这种相同行为进行统一, 就形成标准, 形成接口, 类似 USB 接口, 只要满足他的规

13 60 Java 程序设计 范, 均可以连接到 USB 接口上 Java 语言在模拟现实社会对象的行为过程中, 同样能够将对 象的相同行为统一定义, 称为 Interface( 接口 ) 员工 工资的信息显示问题, 可以抽象定义 接口 Output, 同时需要抽象定义方法 print,print 可以输出到文件 可以输出到打印机等 解决方案 (1) 打开 Eclipse, 选择 Task3_2 项目, 执行复制, 之后粘贴为新项目, 命名为 Task3_3 (2) 选择 File New interface, 新建接口, 命名为 Output, 如图 3 4 所示 图 3 4 创建接口图 代码如下 : 实现显示 打印行为的公共行为定义 / package 李法平 / public interface Output { (3) 在 Output 接口中添加 print 方法用于显示输出 public interface Output { void print();// 输出方法声明

14 第三章面向对象基本特性 61 (4) 在 A 类员工中实现输出行为, 实现接口的行为 public class EmployeeA extends Employee implements Output { // public void print() {// 显示输出 display(); (5) 创建 Salary 工资类, 实现接口 Output, 并实现 print 方法 在 Eclipse 中, 可以在新 建类的新建接口对话框中单击 Add 按钮, 弹出 Implemented Interfaces Selection 窗体, 在弹出窗体中输入 Output 并且单击 Add 按钮, 之后关闭弹出窗体 并单击新建类窗口 的 Finish 按钮, 完成新建操作 如图 3 5 所示 图 3 5 新建类界面 代码如下 : public class Salary implements Output public void print() { (6) 在 print 方法中输出到显示器, 用于测试方法 public class Salary implements Output

15 62 Java 程序设计 public void print() { System.out.println(" 工资管理类 "); (7) 在 Salary 类中, 添加 main 函数测试 A 类员工输出及工资输出 具体代码如下 : public static void main(string[] args) { EmployeeA obj=new EmployeeA(); // 定义 A 类员工类 obj.setemployeeno("001"); // 设置 A 类员工对象值 obj.setemployeename(" 约翰 "); obj.setemployeegender(" 男 "); obj.setemployeedepartment(" 技术一部 "); obj.setemployeepos(" 技术员 "); obj.setemployeetitlepos(" 中级 "); obj.setemployeeentrydate(" "); System.out.println(" 以下是 A 类员工输出 "); Output p=obj; // 将 A 类员工赋值给 Output 接口对象 p.print(); // 调用输出方法 System.out.println(" 以下是工资输出 "); p=new Salary(); // 通过 Salary 类创建 Output 对象 p.print(); // 调用输出方法 (8) 运行 Salary 类下的 main, 结果如图 3 6 所示 图 3 6 运行结果 知识总结 1. 接口概念接口是方法定义和常量值的集合, 接口中定义的方法都是抽象方法, 实现接口的类要实现接口中定义的所有方法 接口的用处主要体现在以下几个方面 : 通过接口实现不相关类的相同方法, 而不需要考虑这些类之间的层次关系 通过接口可以指明多个类需要实现的方法 通过接口可以了解对象的交互界面, 而不需要了解对象所对应的类 总之, 接口的引入实现了某种意义上的多继承, 并且一个类可以实现多个接口

16 第三章面向对象基本特性 接口定义 接口的定义包括接口声明和接口体, 其语法格式如下 : [public] interface 接口名 [extends 父接口列表 ]{ // 接口体 // 常量域声明 [public] [static] [final] 域类型域名 = 常量值 ; // 抽象方法声明 [public] [abstract] 返回值类型方法名 ([ 参数列表 ]); 其中 : (1) 使用 extends 来继承父接口, 与类中的 extends 不同的是, 它可以有多个父接口, 各 接口间用逗号隔开 (2) 接口可以有静态的公开常量, 用 public static final 加以修饰 (3) 接口中所有的方法都是抽象的和公开的, 即用 public abstract 修饰的 (4) 与抽象类一样, 接口不能被实例化 3. 接口实现 接口中声明了一组方法, 而具体地实现接口的方法, 则需要某个类来实现 在类的声明 中使用 implements 关键字来实现接口, 一个类可以同时实现多个接口 Class 类名 implements 接口 1 [ 接口 2, 接口 3,, 接口 n]{ 类体 其中 : 若实现接口的类不是抽象类, 则必须实现所有接口的所有方法 一个类在实现接口的抽象方法时, 必须使用完全相同的方法名 参数列表和相同的返 回值类型 接口中抽象方法的访问修饰符默认为 public, 所以在实现中必须显式地使用 public 修 饰符 接口作为对类的抽象, 主要作用是规范类的方法, 接口不能实现代码的复用 接口的主 要应用有两种方式 : (1) 实现接口 : 通过类对接口的实现, 实现接口中规范的方法, 不同的实现类对方法的 实现可能不同, 从而实现了多态性 (2) 接口作为参数 : 接口可以作为方法定义时的参数, 在实际调用方法时传入接口的实 现类 传入不同的实现类, 实现不同的行为, 从而体现了多态性 应用实践 1. 通过接口实现对圆 矩形求周长和面积 interface Shape1 { // 声明接口 double PI = ; // 定义常量 double area(); // 接口是高度抽象的, 因此省略了 abstract 关键字 interface Shape2 { double perimeter(); // 默认为 public 修饰符

17 64 Java 程序设计 class Rectangle2 implements Shape1, Shape2 { // 实现两个接口 public double length, width; public double area() { // 实现抽象方法 return length width; public double perimeter() { return 2 (length + width); class Circle2 implements Shape1, Shape2 { // 实现两个接口 public double radius; public double area() { return PI radius radius; public double perimeter() { return 2 PI radius; public class Practise3_3_5 { public static void main(string args[]) { Rectangle2 r = new Rectangle2(); Circle2 c = new Circle2(); r.length = 10; r.width = 8; System.out.println(" 矩形的面积是 :" + r.area()+", 周长是 :"+r.perimeter()); c.radius = 5; System.out.println(" 圆的面积是 :" + c.area()+", 周长是 :"+c.perimeter()); 2. 扩展练习 : 利用接口及继承性实现 A B C 类员工的工资类的定义 任务 3.4 静态多态性 情境描述 Tom 开发的工资管理系统中, 相同类型的员工的工资计算方式往往存在多种, 比如 A 类员工, 员工的加班与否往往影响工资的计算, 为了适应不同方式的工资计算,Tom 需要完成以下任务 : (1) 理解方法重载 (2) 定义重载方法 (3) 调用重载方法 问题分析工资计算是一个复杂问题, 相同员工由于工种 职务 劳动强度不同等情况, 可能造成

18 第三章面向对象基本特性 65 工资计算的方式不同, 这就是所谓的行为相同, 但是行为的执行过程多样, 这就是多态性, Java 语言提供方法重载来实现多态性 解决方案 (1) 打开 Eclipse, 选中 Task3_3, 执行复制, 粘贴为新项目 Task3_4 (2) 打开 SalaryB.java 文件, 添加构造方法, 用于初始化 SalaryB 中的所有的成员变量 wage / public SalaryB(EmployeeB obj) { super(obj); this.basewage = 0; this.poswage = 0; this.timewge = 0; timewage / public SalaryB(EmployeeB obj, double basewage, double poswage, double timewage) { super(obj); this.basewage = basewage; this.poswage = poswage; this.timewge = timewage; 注 : 当前 B 类员工的工资构造方法由以前带 2 个参数的方法的基础上, 增加了一个新的 方法 2 个构造方法的名称相同, 但是参数不同 (3) 针对某些员工可能存在的加班情况, 扩展 calwages 方法, 便于实现加班员工的工资 计算问题 / com.esms.salary#calwages()

19 66 Java 程序设计 public void calwages() { EmployeeB obj=(employeeb)this.empobj; this.wage = this.basewage + this.poswage + this.timewgeobj.getemployeeworktimes() ; addwage / public void calwages(double addwage) { calwages(); this.wage = this.wage + addwage; (4) 在 SalaryB 类中添加 main 方法, 测试未加班 B 类员工工资及加了班的员工工资 EmployeeB objtom = new EmployeeB(); // 创建员工对象 objtom.setemployeeno("001"); // 设置工号 objtom.setemployeename(" 汤姆 "); // 设置姓名 objtom.setemployeeworktimes(50); // 工资小时数量 SalaryB salarytom = new SalaryB(objTom); salarytom.setbasewage(1500); // 基本工资 salarytom.setposwage(450); // 岗位工资 salarytom.settimewge(30); // 记时工资单位数量 // 工资计算 salarytom.calwages(); System.out.println(" 以下是未加班的 B 类员工 Tom 的工资 :"); // 输出当前员工的工资 salarytom.print(); EmployeeB objjack=new EmployeeB(); objjack.setemployeeno("002"); objjack.setemployeename(" 杰克 "); objjack.setemployeeworktimes(56); // 第二个构造方法构造对象 SalaryB salaryjack = new SalaryB(objJack,1000,300,60); salaryjack.calwages(400); // 带加班工资的计算 System.out.println(" 以下是加班的 B 类员工 Jack 的工资 :"); salaryjack.print(); (5) 运行 SalaryB 类下的 main 方法, 运行结果如图 3 7 所示 图 3 7 程序运行结果

20 第三章面向对象基本特性 知识总结 1. 多态性 多态性是面向对象程序设计的另一个重要特征 多态是指一个方法只有一个名称, 但可 以有多种行为, 即一个类中可以存在多个同名的方法, 可以使对象具有不同的行为, 实现了对 象行为的多态性 多态可以理解为属于两个或多个不同类的对象以各自的类相关的不同方式响 应同一方法调用的能力 通过继承和接口可以实现多态 多态有两种, 即重载和覆盖 其中覆盖是一种动态的多态, 在面向对象的程序设计中具 有特别的意义 将在后面的任务中提及 2. 方法的重载 方法重载体现了面向对象系统的多态性 方法重载是指一个类中可以有多个方法具有相 同的方法名, 但这些方法的参数个数不同, 或者参数类型不同 重载中需注意以下几点 : (1) 返回类型不同不足以构成方法重载, 重载可以有不同的返回类型 (2) 同名的方法分别位于基类和子类中, 只要参数不同, 也将构成重载 (3) 同一个类中的多个构造方法必然构成重载 重载是一种静态的多态 当重载方法被调用时, 编译器将根据参数的数量和类型来确定 实际调用的重载方法是哪个版本 下述代码为各种类型数据相加方法的重载 : public class OverloadingDemo { int add(int x, int y) { return x + y; int add(int x, int y, int z) { return x + y + z; // 参数个数不同 float add(float x, float y) { return x + y; // 参数类型不同 double add(double x, double y) { // 参数类型不同 return x + y; 应用实践通过本实践巩固对方法重载实现多态性的理解 1. 要求将知识总结中的上述代码补充为一个完整的应用程序 : 实现各类数据相加的方法重载 2. 利用构造方法实现方法重载 编写一个学生类 :student, 类的组成如下 : 成员变量 : 学号 姓名 年龄 专业

21 68 Java 程序设计 成员方法 : (1) 利用构造方法完成设置信息 : 1 无参 : 均为空值 2 单参 : 只传递学号, 则姓名 : 无名氏, 年龄 :0, 专业 : 未定 3 双参 : 只传递学号和姓名, 则年龄 :19, 专业 : 未定 4 四参 : 传递学号 姓名 年龄 专业 (2) 显示信息 扩展练习 : 完善 A 类员工及 C 类员工的工资计算扩展 由于物价消费的过快增长,A 类员工在工资发放的时候, 每人按照职称不等增加了 400~600 元的补贴 ;C 类员工临时加班了几个月增加了交通补贴及加班工资项目 任务 3.5 动态多态性 情境描述 Tom 在该公司进一步调查发现, 同样是 B 类员工, 有的员工工资计算的时候, 计算了岗 位工资, 没有时间工资, 而另外一部分员工有时间工资, 没有岗位工资, 为了解决这个问题, Tom 需要完成以下任务 : (1) 利用基类派生出子类 (2) 重写基类中的工资计算方法 问题分析 B 类员工的工资计算不是简单的拆分问题, 故针对 B 类员工而言, 其工资的计算应该派 生出两个子类, 分别处理两种不同业务逻辑的工资计算, 在子类中对不带参数的方法 calwages 进行重写可以达到目的 解决方案 (1) 打开 Eclipse, 选择项目 Task3_4, 复制粘贴形成新的项目 Task3_5 (2) 修改 SalaryB 的类, 去掉非公共成员 / package 李法平 / public class SalaryB extends Salary {

22 第三章面向对象基本特性 69 private double basewage; private double timewage; wage / public SalaryB(EmployeeB obj) { super(obj); this.basewage = 0; timewage / public SalaryB(EmployeeB obj, double basewage) { super(obj); this.basewage = the basewage / public double getbasewage() { return basewage the basewage to set / public void setbasewage(double basewage) { this.basewage = basewage; / com.esms.salary#calwages()

23 70 Java 程序设计 public void calwages() { this.wage = this.basewage 具备加班工资的工资计算 addwage / public void calwages(double addwage) { calwages(); this.wage = this.wage + addwage; (3) 新建 SalaryB 的派生类 SalaryPostB 及 SalaryTimeB 两个子类, 具体如图 3 8 所示 图 3 8 新建 SalaryPostB 方法 新建成功之后, 分别修改两个类的构造方法, 适应新的构造 修改 SalaryPostB 类的构造 / package com.esms;

24 第三章面向对象基本特性 李法平 / public class SalaryPostB extends SalaryB { private double the poswage / public double getposwage() { return poswage the poswage to set / public void setposwage(double poswage) { this.poswage = obj / public SalaryPostB(EmployeeB obj) { super(obj); //TODO Auto generated constructor timewage / public SalaryPostB(EmployeeB obj, double basewage, double poswage ) { super(obj, basewage); this.poswage=poswage; //TODO Auto generated constructor stub 修改 SalaryTimeB 类的构造方法 /

25 72 Java 程序设计 package 李法平 / public class SalaryTimeB extends SalaryB { double obj / public SalaryTimeB(EmployeeB obj) { super(obj); //TODO Auto generated constructor timewage / public SalaryTimeB(EmployeeB obj, double basewage, double timewage) { super(obj, basewage ); this.timewage=timewage; //TODO Auto generated constructor the timewage / public double gettimewage() { return timewage the timewage to set / public void settimewage(double timewage) { this.timewage = timewage; / (non com.esms.salaryb#calwages() /

26 第三章面向对象基本特性 public void calwages() { EmployeeB obj = (EmployeeB) this.empobj; this.wage=this.getbasewage()+this.gettimewage()obj.getemployeeworktimes(); (4) 针对 SalaryPostB 类, 重写 calwages 方法 / (non com.esms.salaryb#calwages() public void calwages() { this.wage=this.getbasewage()+this.getposwage(); (5) 根据 SalaryTimeB 类的特性, 在 SalaryTimeB 中重写 calwages 方法 / (non com.esms.salaryb#calwages() public void calwages() { EmployeeB obj = (EmployeeB) this.empobj; this.wage=this.getbasewage()+ this.gettimewage()obj.getemployeeworktimes(); (6) 在 SalaryB 基类中编写主函数验证 args / public static void main(string[] args) { EmployeeB objtom = new EmployeeB(); objtom.setemployeeno("001"); objtom.setemployeename(" 汤姆 "); // 创建员工对象 // 设置工号 // 设置姓名 SalaryB salarytom = new SalaryPostB(objTom,1500,2000); // 工资计算 salarytom.calwages(); System.out.println(" 以下是 B 类员工按岗位计算工资情况 :"); // 输出当前员工的工资 salarytom.print(); EmployeeB objjack=new EmployeeB(); objjack.setemployeeno("002"); objjack.setemployeename(" 杰克 "); objjack.setemployeeworktimes(64); // 第二个构造方法构造对象

27 74 Java 程序设计 SalaryB salaryjack = new SalaryTimeB(objJack,1000,30); salaryjack.calwages(400);// 带加班工资的计算 System.out.println(" 以下是 B 类员工按小时计算工资情况 :"); salaryjack.print(); (7) 运行结果如图 3 9 所示 图 3 9 程序运行结果 知识总结 1. 方法的覆盖方法覆盖是 Java 实现多态性机制的另一种方式 在类的继承的部分已经作了介绍, 由于它在面向对象的程序设计中的重要性, 这里再次对它进行详细的讨论 在继承关系中, 基类 ( 也包括接口 ) 和子类存在同名的方法, 如果同时满足以下条件 : 相同的参数 ( 包括参数个数 类型 顺序 ) 相同的返回值类型 那么, 子类的方法覆盖基类的方法 使用覆盖时需注意以下几点 : 不允许出现参数相同, 但返回值类型不同的同名方法 子类方法不能比基类同名方法有更严格的访问范围 子类方法不能比基类同名方法抛出更多的异常 覆盖是一种动态的多态, 它是通过基类引用来体现的 JVM 根据当前被引用对象的类型来动态地决定执行的是覆盖方法的哪个版本 2. 多态的优点覆盖这种形式的多态具有以下优点 : (1) 可替换性 : 多态对已存在的代码具有可替换性 (2) 可扩充性 : 多态对代码具有可扩充性 增加新的子类不影响已存在类的多态性 继承性, 以及其他特性的运行和操作 (3) 接口性 : 多态是接口通过方法签名, 向子类提供一个共同接口, 由子类来覆盖它而实现的 应用实践为了更充分地理解多态, 体现面向对象程序设计的核心思想, 完成本实践内容 修改实践 3.3.5, 通过接口实现对圆 矩形求面积

28 第三章面向对象基本特性 75 interface ShapeOver { double area(); class RectangleOver implements ShapeOver { public double length; public double width; public double area() { // 覆盖接口的方法 return length width; class CircleOver implements ShapeOver { public double radius; public double area() { // 覆盖接口的方法 return Math.PI radius radius; public class Practise3_5_5 { public static void main(string[] args) { RectangleOver r = new RectangleOver(); CircleOver c = new CircleOver(); r.length = 10; r.width = 8; c.radius = 5; // 声明一个矩形 // 声明一个圆 ShapeOver shape; shape = r; printarea(shape); // 实参是 shape, 但它指向的是 RectangleOver() 的实例 shape = c; printarea(shape); // 实参是 shape, 但它指向的是 CircleOver() 的实例 static void printarea(shapeover shape) { System.out.println(" 面积是 :" + shape.area()); // 动态多态, 根据传入对象的实际类型, 调用正确的覆盖方法的版本 // 是矩形时, 调用矩形的面积计算方法 ; 是圆时, 调用圆的面积计算方法 在此基础上, 读者可根据 Shape 的接口要求, 增加实现三角形类等功能 任务小结 本章节中, 主要总结了面向对象程序设计的基本特性 : 封装性 继承性和多态性 面向对象程序设计体系中的思想精髓之一是 面向接口编程 接口中只有抽象的方法, 可以将这些方法理解成是一组规则的集合, 它规定了实现本接口的类或继承本接口的接口必须 拥有的一组规则 多态可以体现在类对类的继承上, 也可以体现在类对接口的实现上

29 76 Java 程序设计 接口的使用会导致代码结构变得复杂, 但对于大型系统却有着不可估量的作用, 因为它能使大型系统变得结构清晰 容易维护 抽象类和接口都是建立在抽象的基础上的, 它们的区别在于想要达到的目的 使用抽象类是为了代码的复用, 使用接口是为了实现多态性 面向对象的思想就是模拟真实世界, 把真实世界中的事物抽象成类, 使整个程序靠各个类的实例通过互相通信和互相协作来完成系统功能 练习作业 1. 创建一个 Animal 类, 让 Horse Dog Cat 等动物继承 Animal 类 在 Animal 类中定义一些方法, 让其子类重载这些方法, 编写一个运行时多态的程序 2. 修改练习 1, 使 Animal 成为一个接口 3. 利用接口编写计算三角形 梯形 锥形面积及周长的程序 4. 编写一个类, 该类有一个方法 public int f(int a,int b), 该方法返回 a 和 b 的最大公约数 然后再编写一个该类的子类, 要求子类覆盖方法 f, 而且覆盖的方法将返回 a 和 b 的最小公倍数 要求在覆盖的方法体中首先调用被隐藏的方法返回 a 和 b 的最大公约数 m, 然后将乘积 (ab)/m 返回 要求在应用程序的主类中分别使用父类和子类创建对象, 并分别调用方法 f 计算两个正整数的最大公约数和最小公倍数 5.Eclipse 提供了一些自动生成代码的工具, 例如自动生成 setters() 和 getters() 方法 请在 Eclipse 中找出更多的自动生成代码的功能 探索它们的用途以及与本章内容有什么关系? 6.Eclipse 为程序员提供了许多工具, 其中一个是 格式 ( 主菜单中的 Source Format ), 能够将不规则的代码重排, 称为符合规范的代码 探索一下它的功能, 写一段代码, 然后用 Format 功能, 了解规范的代码的写法

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

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

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

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

エスポラージュ株式会社 住所 : 東京都江東区大島 東急ドエルアルス大島 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

新・解きながら学ぶ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 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: 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

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

模板

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

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

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

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

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

chp5_1

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

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

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

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

More information

Microsoft Word - 第5章.doc

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

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

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

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 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

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

教案模板4-2

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

More information

Microsoft Word - 第2章.doc

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

More information

《大话设计模式》第一章

《大话设计模式》第一章 第 1 章 代 码 无 错 就 是 优? 简 单 工 厂 模 式 1.1 面 试 受 挫 小 菜 今 年 计 算 机 专 业 大 四 了, 学 了 不 少 软 件 开 发 方 面 的 东 西, 也 学 着 编 了 些 小 程 序, 踌 躇 满 志, 一 心 要 找 一 个 好 单 位 当 投 递 了 无 数 份 简 历 后, 终 于 收 到 了 一 个 单 位 的 面 试 通 知, 小 菜 欣 喜

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

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

untitled

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

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

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

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

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

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

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

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

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

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

<4D6963726F736F667420506F776572506F696E74202D20332D322E432B2BC3E6CFF2B6D4CFF3B3CCD0F2C9E8BCC6A1AAD6D8D4D8A1A2BCCCB3D0A1A2B6E0CCACBACDBEDBBACF2E707074>

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

More information

Microsoft Word - word模板-教师.doc

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

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

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

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

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

More information

chp4

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

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

EJB-Programming-4-cn.doc

EJB-Programming-4-cn.doc EJB (4) : (Entity Bean Value Object ) JBuilder EJB 2.x CMP EJB Relationships JBuilder EJB Test Client EJB EJB Seminar CMP Entity Beans Session Bean J2EE Session Façade Design Pattern Session Bean Session

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

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

More information

Microsoft PowerPoint - ch6 [相容模式]

Microsoft PowerPoint - ch6 [相容模式] UiBinder wzyang@asia.edu.tw UiBinder Java GWT UiBinder XML UI i18n (widget) 1 2 UiBinder HelloWidget.ui.xml: UI HelloWidgetBinder HelloWidget.java XML UI Owner class ( Composite ) UI XML UiBinder: Owner

More information

获取 Access Token access_token 是接口的全局唯一票据, 接入方调用各接口时都需使用 access_token 开发者需要进行妥善保存 access_token 的存储至少要保留 512 个字符空间 access_token 的有效期目前为 2 个小时, 需定时刷新, 重复

获取 Access Token access_token 是接口的全局唯一票据, 接入方调用各接口时都需使用 access_token 开发者需要进行妥善保存 access_token 的存储至少要保留 512 个字符空间 access_token 的有效期目前为 2 个小时, 需定时刷新, 重复 获取 Access Token access_token 是接口的全局唯一票据, 接入方调用各接口时都需使用 access_token 开发者需要进行妥善保存 access_token 的存储至少要保留 512 个字符空间 access_token 的有效期目前为 2 个小时, 需定时刷新, 重复 获取将导致上次获取的 access_token 失效 接入方可以使用 AppID 和 AppSecret

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

res/layout 目录下的 main.xml 源码 : <?xml version="1.0" encoding="utf 8"?> <TabHost android:layout_height="fill_parent" xml

res/layout 目录下的 main.xml 源码 : <?xml version=1.0 encoding=utf 8?> <TabHost android:layout_height=fill_parent xml 拓展训练 1- 界面布局 1. 界面布局的重要性做应用程序, 界面是最基本的 Andorid 的界面, 需要写在 res/layout 的 xml 里面, 一般情况下一个 xml 对应一个界面 Android 界面布局有点像写 html( 连注释代码的方式都一样 ), 要先给 Android 定框架, 然后再在框架里面放控件,Android 提供了几种框架,AbsoluteLayout,LinearLayout,

More information

Microsoft Word - 01.DOC

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

More information

Microsoft Word - 第5章.doc

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

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

姓名 : 年级专业 : 学号 : 凡年级专业 姓名 学号错写 漏写或字迹不清者, 成绩按零分记 密 封 线 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

1 1 大概思路 创建 WebAPI 创建 CrossMainController 并编写 Nuget 安装 microsoft.aspnet.webapi.cors 跨域设置路由 编写 Jquery EasyUI 界面 运行效果 2 创建 WebAPI 创建 WebAPI, 新建 -> 项目 ->

1 1 大概思路 创建 WebAPI 创建 CrossMainController 并编写 Nuget 安装 microsoft.aspnet.webapi.cors 跨域设置路由 编写 Jquery EasyUI 界面 运行效果 2 创建 WebAPI 创建 WebAPI, 新建 -> 项目 -> 目录 1 大概思路... 1 2 创建 WebAPI... 1 3 创建 CrossMainController 并编写... 1 4 Nuget 安装 microsoft.aspnet.webapi.cors... 4 5 跨域设置路由... 4 6 编写 Jquery EasyUI 界面... 5 7 运行效果... 7 8 总结... 7 1 1 大概思路 创建 WebAPI 创建 CrossMainController

More information

Microsoft Word - 第5章.doc

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

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

幻灯片 1

幻灯片 1 信息科学技术学院 程序设计实习 郭炜微博 http://weibo.com/guoweiofpku http://blog.sina.com.cn/u/3266490431 刘家瑛微博 http://weibo.com/pkuliujiaying 1 信息科学技术学院 程序设计实习 郭炜刘家瑛 继承和派生 ( 教材 P215) 2 继承和派生的概念 继承 : 在定义一个新的类 B 时, 如果该类与某个已有的类

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

拦截器(Interceptor)的学习

拦截器(Interceptor)的学习 二 拦截器 (Interceptor) 的学习 拦截器可以监听程序的一个或所有方法 拦截器对方法调用流提供了细粒度控制 可以在无状态会话 bean 有状态会话 bean 和消息驱动 bean 上使用它们 拦截器可以是同一 bean 类中的方法或是一个外部类 下面介绍如何在 Session Bean 类中使用外部拦截器类 @Interceptors 注释指定一个或多个在外部类中定义的拦截器 下面拦截器

More information

Strings

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

More information

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

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

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

输入 project name 选择完成

输入 project name 选择完成 JAVA 程序访问 HighGo DB 的环境准备 山东瀚高科技有限公司版权所有仅允许不作任何修改的转载和转发 Hibernate 的配置 MyEclipse 中创建新项目 : 选择菜单栏 file---new---project 选择 web project 进行下一步 输入 project name 选择完成 4. 单击 " 添加 JAR/ 文件夹 ", 会如下图出现 JDBC 下载 Hibernate

More information

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

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

More information

chp6.ppt

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

More information

云数据库 RDS SDK

云数据库 RDS SDK 云数据库 RDS SDK SDK SDK 下载 SDK 下载 最新版本 java_sdk.zip python_sdk.zip php_sdk.zip c#_sdk.zip 历史版本 2015-11-3 java_sdk.zip python_sdk.zip php_sdk.zip c#_sdk.zip JAVA 教程 JAVA 创建 Access Key 登陆阿里云账号 打开 我的 Access

More information

extend

extend (object oriented) Encapsulation Inheritance Polymorphism Dynamic Binding (base class) (derived class) 1 class Base { int I; void X(); void Y(); class Derived: public Base { private: int j; void z(); Derived

More information

Microsoft PowerPoint - 04-Inheritance.ppt

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

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

1: public class MyOutputStream implements AutoCloseable { 3: public void close() throws IOException { 4: throw new IOException(); 5: } 6:

1: public class MyOutputStream implements AutoCloseable { 3: public void close() throws IOException { 4: throw new IOException(); 5: } 6: Chapter 15. Suppressed Exception CH14 Finally Block Java SE 7 try-with-resources JVM cleanup try-with-resources JVM cleanup cleanup Java SE 7 Throwable getsuppressed Throwable[] getsuppressed() Suppressed

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

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

使用MapReduce读取XML文件

使用MapReduce读取XML文件 使用 MapReduce 读取 XML 文件 XML( 可扩展标记语言, 英语 :extensible Markup Language, 简称 : XML) 是一种标记语言, 也是行业标准数据交换交换格式, 它很适合在系统之间进行数据存储和交换 ( 话说 Hadoop H ive 等的配置文件就是 XML 格式的 ) 本文将介绍如何使用 MapReduce 来读取 XML 文件 但是 Had oop

More information

Microsoft Word - JCS5.doc

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

More information

Microsoft Word - 正文.doc

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

More information

Microsoft Word - chap10.doc

Microsoft Word - chap10.doc 78 10. Inheritance in C++ 我 們 已 介 紹 了 物 件 導 向 程 式 的 第 一 個 主 要 特 性, 即 程 式 可 模 組 化 成 為 類 別 ( 物 件 ), 類 別 具 有 資 料 封 裝 的 特 性 接 下 來 我 們 要 介 紹 物 件 導 向 程 式 的 另 一 個 主 要 特 性, 那 就 是 類 別 具 有 繼 承 的 功 能 繼 承 就 是 重 複

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

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

<4D6963726F736F667420506F776572506F696E74202D20B5DA3035D5C220C3E6CFF2B6D4CFF3B8DFBCB6B3CCD0F2C9E8BCC6>

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

More information

附录J:Eclipse教程

附录J:Eclipse教程 附 录 J:Eclipse 教 程 By Y.Daniel Liang 该 帮 助 文 档 包 括 以 下 内 容 : Eclipse 入 门 选 择 透 视 图 创 建 项 目 创 建 Java 程 序 编 译 和 运 行 Java 程 序 从 命 令 行 运 行 Java Application 在 Eclipse 中 调 试 提 示 : 在 学 习 完 第 一 章 后 使 用 本 教 程 第

More information

第1章 Delphi简介

第1章  Delphi简介 第 3 章 Java 面向对象编程机制 Java 核心技术 计算机程序告诉计算机应该做什么 计算机执行的任何操作都是由程序控制的 程序设计是将计算机要执行的操作或者计算机要解决的问题转变成程序的过程 程序设计的过程主要分为面向过程编程和面向对象编程两种风格, 本书讲解的 Java 语言编程属于面向对象编程技术 本章要点 面向对象编程的基本思想 类与对象 抽象类与接口 Java 简单程序 学习目标 理解面向对象编程的基本思想

More information

Microsoft Word - 第3章.doc

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

More information

01_Service

01_Service 移动平台应用软件开发 Service 主讲 : 张齐勋 zhangqx@ss.pku.edu.cn 移动平台应用软件开发 课程建设小组 北京大学 二零一七年 什么是 Service 与 Activity 一样, 同属 Android 基本组件 后台运行, 不与用户交互, 没有可视化界面 最常见的 Service 如 : 在后台播放歌曲 后台执行文件的下载 同样需在 AndroidManifest.xml

More information

Microsoft Word - Hibernate与Struts2和Spring组合指导.doc

Microsoft Word - Hibernate与Struts2和Spring组合指导.doc 1.1 组合 Hibernate 与 Spring 1. 在 Eclipse 中, 新建一个 Web project 2. 给该项目增加 Hibernate 开发能力, 增加 Hibernate 相关类库到当前项目的 Build Path, 同时也提供了 hibernate.cfg.xml 这个配置文件 3. 给该项目增加 Spring 开发能力, 增加 spring 相关类库到当前项目的 Build

More information

PowerPoint 演示文稿

PowerPoint 演示文稿 The BitCoin Scripting Language 交易实例 交易结构 "result": { "txid": "921a dd24", "hash": "921a dd24", "version": 1, "size": 226, "locktime": 0, "vin": [ ], "vout": [ ], "blockhash": "0000000000000000002c510d

More information

<4D F736F F F696E74202D20A1B64A617661B8DFBCB6BCBCCAF5A1B7B5DA31312E35BDB220B6AFCCACC0E0D0CDBCECB2E92E707074>

<4D F736F F F696E74202D20A1B64A617661B8DFBCB6BCBCCAF5A1B7B5DA31312E35BDB220B6AFCCACC0E0D0CDBCECB2E92E707074> Java 高级技术 课程 Java 语言的高级特性 (8) 李戈 北京大学信息科学技术学院软件研究所 2008 年 5 月 11 日 运行期类型识别 RTTI ( Run-Time Type Identification ) 在运行期间, 识别一个对象的类型 运行期类型识别 RTTI 的三种方法 强制类型转换 利用 Class 对象 通过比较识别类型 (1) 利用强制类型转换判别运行期类型 class

More information

何对象存在, 所以, 如果不将它设置为类相关的, 则没有办法得到任何的对象, 也就无法调用这个 main() 方法 知识准备 :static 变量的引用方法 1. 通过对象定位变量 在 节中我们定义了 StaticTest 类, 并在类中定义了 static 变量 现在我们通

何对象存在, 所以, 如果不将它设置为类相关的, 则没有办法得到任何的对象, 也就无法调用这个 main() 方法 知识准备 :static 变量的引用方法 1. 通过对象定位变量 在 节中我们定义了 StaticTest 类, 并在类中定义了 static 变量 现在我们通 第 7 章高级类特性 本章详细介绍 static 变量 方法和初始化段的概念和用法 ;final 数据 方法和类的用 法 ; 抽象类和接口的概念, 以及它们之间的联系和区别 ; 多态概念以及内部类的概念和用 法 ; 最后, 对一些常用的修饰符做了一个简单的总结 7.1 static 关键字 7.1.1 知识准备 :static 概述 通常我们在创建一个类时, 是在描述那个类的对象的外观与行为 只有用

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

EJB-Programming-3.PDF

EJB-Programming-3.PDF :, JBuilder EJB 2.x CMP EJB Relationships JBuilder EJB Test Client EJB EJB Seminar CMP Entity Beans Value Object Design Pattern J2EE Design Patterns Value Object Value Object Factory J2EE EJB Test Client

More information

Microsoft Word - JAVA3.rtf

Microsoft Word - JAVA3.rtf Java2 lesson The aim of this lesson is concept and method. ( 赵 卓 宁 ) 教 学 计 划 学 习 进 度 Java 3 6.1~6.34 内 容 介 绍 教 材 内 容 : 第 六 课 描 绘 的 层 次 和 关 系 主 要 议 程 1. 的 复 用 2. 的 继 承 3. 关 于 多 态 4. 应 用 约 束 ( 封 装 ) 5. 接

More information

Guava学习之Resources

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

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

教学内容 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

本章学习目标 小风 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