版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第 二 章构造方法与方法重载构造方法与方法重载回忆回忆v对象由属性数据和方法函数组成;v类是具有相同属性和方法的对象的集合;v封装可以隐藏对象实现的细节部分;v对象是引用数据类型,使用new运算符创建对象实例,使用成员运算符访问对象中的成员;本章相关词汇蓝色为关键字)本章相关词汇蓝色为关键字)单 词说 明this这,这个overloaded重载,超载overloaded method方法重载本章目标本章目标v方法重载v重载构造方法v对象在内存中的存放形式vthis关键字JavaJava中的方法中的方法v 在Java中,函数直接定义即可;v Java中,函数被称为方法;v 定义一个方法的一般形式
2、:v访问权限 返回值类型 方法名称(形参列表) v方法主体;vv 我们更关注的是方法原型,对于方法原型的三个主要组成部分应当明确区分:v 返回值类型v 方法名称v 形式参数方法原型方法原型在在JavaJava中定义方法中定义方法/*Java中的方法示例中的方法示例代码片段代码片段*/*定义求平方值的方法定义求平方值的方法*/public int square(int x) return (x * x);返回值类型返回值类型方法名称方法名称形式参数形式参数案例案例/*编写求绝对值的方法来求整数的绝对值编写求绝对值的方法来求整数的绝对值*/*AbsoluteValue类,其中包含求绝对值的方法类,
3、其中包含求绝对值的方法Java中的任何方法都必须在类中定义中的任何方法都必须在类中定义*/public class AbsoluteValue /*求绝对值的方法求绝对值的方法*/ public int abs(int x) return (x = 0) ? x : -x); /*main方法,程序入口方法,程序入口*/ public static void main(String args) /必须先实例化类的对象,才可以调用到其中的成员方法必须先实例化类的对象,才可以调用到其中的成员方法 AbsoluteValue obj = new AbsoluteValue(); int a = -8
4、, b; b = obj.abs(a); /调用调用abs方法求方法求a的绝对值的绝对值 System.out.println(a + 的绝对值是的绝对值是 + b); 方法的定义方法的定义方法的调用方法的调用案例分析案例分析v在上面的案例中,我们已经定义了求整数绝对值的方法;v但有时候,我们可能还需要求浮点数的绝对值,请问:可以继续使用这个方法吗?v事实上是行不通的,这个方法只能求出整数的绝对值,对于浮点数,还需另外再定义求浮点数绝对值的方法。修改案例修改案例public class AbsoluteValue /*求整数绝对值的方法求整数绝对值的方法*/ public int absOfI
5、nt(int x) return (x = 0) ? x : -x); /*求浮点数绝对值的方法求浮点数绝对值的方法*/ public float absOfFloat(float x) return (x = 0) ? x : -x); public static void main(String args) AbsoluteValue obj = new AbsoluteValue(); int a = -8, b; b = obj.absOfInt(a); System.out.println(a + 的绝对值是的绝对值是 + b); float c = -3.14f, d; d = o
6、bj.absOfFloat(c); System.out.println(c + 的绝对值是的绝对值是 + d); 如果还要求其它类型的如果还要求其它类型的绝对值,就需要定义更绝对值,就需要定义更多的方法,这对于调用多的方法,这对于调用者来说,将会是非常麻者来说,将会是非常麻烦的事情。烦的事情。方法重载方法重载v用于定义一组方法,这些方法具有相同的名称,并执行类似的操作,但是却使用不同的参数列表;v编译器会根据调用时传递的实际参数自动判断具体调用的是哪个重载方法,如:/*abs方法的重载方法的重载*/int abs(int x) float abs(float x) double abs(do
7、uble x) long abs(long x) 方法重载的三大原则方法重载的三大原则v 方法名相同v 参数不同可以有三方面的不同)v 数量不同v 类型不同v 顺序不同v 同一作用域v 温馨提示:方法重载跟方法的返回值类型没有任何关系。也就是说,只有返回值不同的方法不能构成重载。/*错误的方法重载错误的方法重载*/void fun(int x) ;int fun(int x) ;方法重载示例方法重载示例public class AbsoluteValue public int abs(int x) /重载方式重载方式1,求整数的绝对值,求整数的绝对值 return (x = 0) ? x :
8、-x); public float abs(float x) /重载方式重载方式2,求浮点数的绝对值,求浮点数的绝对值 return (x = 0) ? x : -x); public double abs(double x) /重载方式重载方式3,求双精度数的绝对值,求双精度数的绝对值 return (x = 0) ? x : -x); public long abs(long x) /重载方式重载方式4,求长整型数的绝对值,求长整型数的绝对值 return (x = 0) ? x : -x); public static void main(String args) AbsoluteVal
9、ue obj = new AbsoluteValue(); int a = -8, b; b = obj.abs(a); System.out.println(a + 的绝对值是的绝对值是 + b); float c = -3.14f, d; d = obj.abs(c); System.out.println(c + 的绝对值是的绝对值是 + d); 方法重载的两种方式之一方法重载的两种方式之一v利用不同数据类型的参数重载;v对于带有相同数量参数但参数类型不同的重载方法,编译器可以区分它们,如:v只要所有参数式样都是唯一的,就可以使用多个重载;v很多编程语言已经重载了输出方法,以便您可以用相
10、同的函数名称输出任何类型的数据。int square(int x) float square(float x) double square(double x) 方法重载的两种方式之二方法重载的两种方式之二v利用不同数量的参数重载,如:v将调用与参数最匹配的方法,如果没有方法得出最佳匹配,那么编译器将报错;v编译器解决重载的方式与方法定义的顺序无关;v重载不考虑方法的返回值类型。/*函数定义函数定义*/int fun(int n1) int fun(int n1, int n2, int n3) /*函数调用函数调用*/fun(a);fun(x, y, z);方法重载的作用域规则方法重载的作用域
11、规则v只有属于同一作用域范围内的方法才能构成重载。class First public void show() class Second public void show(int x) 不构成重载不构成重载课堂练习课堂练习1 1在Java中,对于成员方法float add(float f1, float f2) 下面选项()是对该成员方法的重载。int add(int n1, int n2) float add(float f) float add(float f2, float f1) void add(float f1, float f2) void add(float f1, float
12、 f2, float x) 课堂练习课堂练习2 2在Java中,下列方法()不能与int fun(int x) 构成方法重载。int fun(int x, int y) float fun(int x) int fun(float x) int fun(int x, int y, int z) 关于方法重载的重要提示关于方法重载的重要提示请勿将功能完全不一请勿将功能完全不一样的方法进行重载!样的方法进行重载!构造方法构造方法v在上例中,只能逐个地为数据成员赋值,如果想在对象实例化的同时就初始化成员属性,就使用到了构造方法;v构造方法是特殊的成员方法,它与类同名,在对象实例化时由虚拟机自动调用;
13、v请注意:构造方法没有返回值类型,也不能有返回值。构造方法构造方法v正是由于在实例化对象的同时会自动调用构造方法,所以构造方法一般用来给数据成员分配资源或初始化数据成员;v构造方法的一般形式:v访问权限 类名形参列表) v 方法体v v因为是由虚拟机来调用构造方法,所以构造方法一般应定义成public。构造方法示例构造方法示例/*定义定义ConstructorDemo类,对构造方法进行测试类,对构造方法进行测试*/class ConstructorDemo /*构造方法,方法名与类名完全一致构造方法,方法名与类名完全一致 无需指定返回值类型,也不能有返回值无需指定返回值类型,也不能有返回值*/
14、 public ConstructorDemo() System.out.println(这是构造方法这是构造方法); /*Test类,用来容纳类,用来容纳main方法方法一般将包含有一般将包含有main方法的类声明为方法的类声明为public*/public class Test /*main方法,程序入口方法,程序入口*/ public static void main(String args) /*实例化实例化ConstructorDemo类的对象类的对象*/ ConstructorDemo cd = new ConstructorDemo(); 为为StudentStudent类添加构
15、造方法类添加构造方法class Student /定义学生类定义学生类 private String name; /姓名,私有姓名,私有 private int age; /年龄,私有年龄,私有 private float weight; /体重,私有体重,私有 /构造方法,根据传递进来的参数,为数据成员赋值构造方法,根据传递进来的参数,为数据成员赋值 public Student(String n, int a, float w) /分别为每个数据成员赋初始值分别为每个数据成员赋初始值 name = n; age = a; weight = w; public void setName(St
16、ring n) /为姓名赋值的方法,公有,代码略为姓名赋值的方法,公有,代码略 public void setAge(int a) /为年龄赋值的方法,公有,代码略为年龄赋值的方法,公有,代码略 public void setWeight(float w) /为体重赋值的方法,公有,代码略为体重赋值的方法,公有,代码略 public void display() /将所有信息打印出来的方法,公有,代码略将所有信息打印出来的方法,公有,代码略 public void dining() /吃饭的方法,公有,代码略吃饭的方法,公有,代码略 public void walk() /走路的方法,公有,代
17、码略走路的方法,公有,代码略public class Test public static void main(String args) /利用构造方法,为数据成员指定初始值利用构造方法,为数据成员指定初始值 Student std = new Student(张三张三, 18, 55); std.display(); /将信息打印出来将信息打印出来 构造方法续)构造方法续)v每个对象在生成时都必须执行构造方法,而且只能执行一次;v如果构造方法调用失败,那么对象也无法创建;v不可以显式地直接调用构造方法;v在没有定义构造方法的情况下,类会自动产生一个无参数的默认构造方法,这个默认的构造方法什么
18、都不做;v一旦显式地定义了构造方法,默认构造方法自动消失。重载构造方法重载构造方法v方法重载的一个重要应用就是重载构造方法;v可以定义一组构造方法,使其构成重载关系,从而方便使用者能够灵活机动地以各种不同的方式来实例化对象。重载构造方法示例重载构造方法示例class MyTime /定义时间类定义时间类 private int mHour, mMinute, mSecond; /三个成员变量,时、分、秒三个成员变量,时、分、秒 public MyTime() /构造方法重载构造方法重载1 mHour = 0; mMinute = 0; mSecond = 0; public MyTime(in
19、t hour) /构造方法重载构造方法重载2 mHour = hour; mMinute = 0; mSecond = 0; public MyTime(int hour, int minute) /构造方法重载构造方法重载3 mHour = hour; mMinute = minute; mSecond = 0; public MyTime(int hour, int minute, int second) /构造方法重载构造方法重载4 mHour = hour; mMinute = minute; mSecond = second; public void display() /显示时间信
20、息的方法显示时间信息的方法 System.out.println(mHour + : + mMinute + : + mSecond); 重载构造方法示例续)重载构造方法示例续)/*测试时间类测试时间类*/public class Test /*main方法,程序入口方法,程序入口*/ public static void main(String args) /分别调用不同的构造方法来初始化时间对象分别调用不同的构造方法来初始化时间对象 MyTime t1 = new MyTime(); /调用重载方式调用重载方式1 t1.display(); MyTime t2 = new MyTime(8
21、); /调用重载方式调用重载方式2 t2.display(); MyTime t3 = new MyTime(8, 30); /调用重载方式调用重载方式3 t3.display(); MyTime t4 = new MyTime(8, 30, 30); /调用重载方式调用重载方式4 t4.display(); /*使用重载构造方法可以使初始化对象的方式灵活机动,大使用重载构造方法可以使初始化对象的方式灵活机动,大大方便类的使用者。大方便类的使用者。*/对象在内存中的存放形式对象在内存中的存放形式成员方法成员方法1成员方法成员方法2成员方法成员方法n成员变量成员变量1成员变量成员变量2成员变量成员变量n成员变量成员变量1成员变量成员变量2成员变量成员
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 世界地理 澳大利亚
- 一年级语文下册《语文园地八》课件
- 单位管理制度收录大全【员工管理】
- 港口生产组织与管理课件-港口企业的生产运作
- 消防整改项目可行性研究报告两
- 铜铝合金制品项目可行性研究报告
- 生活中的经济学课件
- 2025年瓦楞纸生项目可行性研究报告
- 氧气瓶项目安全风险评价报告
- 2025年中国公共云存储服务行业发展前景预测及投资战略研究报告
- 部编人教版八年级语文下册第11课《核舟记》精美课件
- 2022年盐城市大数据集团有限公司招聘笔试试题及答案解析
- 2023年郑州大学第一附属医院医护人员招聘笔试题库及答案解析
- 不同用地性质交通吸发率
- 血液系统疾病概述(血液科)
- 重庆九龙坡区2022-2023学年高一物理第一学期期末质量跟踪监视试题含解析
- 建筑施工现场农民工维权告示牌
- 《枪炮、病菌与钢铁》-基于地理视角的历史解释(沐风学堂)
- 酒店爆炸及爆炸物品紧急处理应急预案
- 2022年版物理课程标准的特点探讨与实施建议
- 幼儿园班级安全教育活动计划表
评论
0/150
提交评论