习题课
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
当子类对象赋值给父类对象后,父类对象只能 当子类对象赋值给父类对象后, 引用与子类对象同名的成员,而且引用的是同名 引用与子类对象同名的成员,而且引用的是同名 的父类成员变量和子类方法。 的父类成员变量和子类方法。
2、父类对象向子类对象赋值 、
父类对象向子类对象赋值时Hale Waihona Puke Baidu必须使用显式转换, 父类对象向子类对象赋值时,必须使用显式转换,即强制 类型转换: 类型转换 子类对象=(子类名 父类对象 子类对象 子类名)父类对象 子类名
1、理解题意。 、理解题意。 2、上机之前在作业本上写出程序。 、上机之前在作业本上写出程序。 3、记录调试程序时出现的错误,在作业本上说明出错 、 记录调试程序时出现的错误, 的原因。 的原因。
三 、类对象之间的类型转换
1、 子类对象向父类对象赋值 ( 扩大转换是 、 子类对象向父类对象赋值( 安全的) 安全的)
习题课
• • • •
静态成员 多态 抽象类 接口
一、静态变量与静态方法 ●静态变量相当于全局变量。 静态变量相当于全局变量。 静态方法只能访问静态变量。 ●静态方法只能访问静态变量。 静态成员可以用类访问。 ●静态成员可以用类访问。
二、 继承中方法的调用问题
Java规定,执行对象的方法时,首先在 规定,执行对象的方法时, 规定 对象所属的类中进行检查, 对象所属的类中进行检查,是否有与要执 行的方法同名、同参数的方法( 行的方法同名、同参数的方法(是否有能 匹配的方法),若有,就调用该方法。 ),若有 匹配的方法),若有,就调用该方法。否 就到父类中检查能匹配的方法, 则Java就到父类中检查能匹配的方法,如 就到父类中检查能匹配的方法 就调用该方法。 有,就调用该方法。否则就继续沿着继承 链向上查找,直到找到能匹配的方法。 链向上查找,直到找到能匹配的方法。若 在整个链中都找不到能匹配的方法, 在整个链中都找不到能匹配的方法,则将 产生编译错误。 产生编译错误。
class Student extends Person { private float java,english; Student(String n,int a, float j,float e) { super(n,a); java=j; english=e; } void show() { System.out.println(“java score is ”+java+”.”); System.out.println(“eng score is ”+english+”.”); } }
上机作业: • 题目:开发一个员工管理系统,员工 (Employee)有三个属性:姓名、工号和工资, )有三个属性:姓名、工号和工资, 用继承的方法设计一个经理类。 要求设计出对 用继承的方法设计一个经理类 。 员工进行初始化的构造方法, 练习类的继承、 员工进行初始化的构造方法 , 练习类的继承 、 方法的覆盖、属性的隐藏, 的用法。 方法的覆盖 、 属性的隐藏 , this和super的用法。 和 的用法 • 要求: 要求:
五、接口的定义、实现、意义
• 详细内容见接口课件。
例题
• 例1 定义接口来实现描述自己为不同角色的 信息。 信息。 • 例2 定义抽象类和接口, 定义抽象类和接口,分别计算圆和矩形 的面积。 的面积。
class Xuesheng { public static void main(String[] args) { Student s1=new Student("tct1",18,67,89); s1.print(); Person s2=new Person("tct2",23); s2.print(); } } 说明: 说明: 从表面上看, 都是要求执行print()方 从表面上看, s1.print()和 s2.print()都是要求执行 和 都是要求执行 方 实际上, 法,实际上,Java根据对象所在的继承层次中的位置来确定执 根据对象所在的继承层次中的位置来确定执 行哪种方法。方法的形式相同,而对象的响应不同, 行哪种方法。方法的形式相同,而对象的响应不同,这是一种 多态的表现形式。多态的表现方式是哪两种? 多态的表现形式。多态的表现方式是哪两种?
例: class Person { String name; private int age; Person(String n,int a) { name=n; age=a; } public void print() { System.out.println(“My name is ”+name+”.”); } }
四 、抽象类的定义、使用
• 含有抽象方法的类必须定义成抽象类。 含有抽象方法的类必须定义成抽象类。 修饰, • 抽象方法用 抽象方法用abstract修饰,它没有方法体。 修饰 它没有方法体。 • 抽象类的抽象方法由其子类实现。 抽象类的抽象方法由其子类实现。 抽象方法由其子类实现
举例
电在传输上都会有损耗, 电在传输上都会有损耗,假如计算电费 时区分冬季和夏季用电情况, 时区分冬季和夏季用电情况,冬季在用电 原有读数上加上20千瓦小时作为用电损耗 千瓦小时作为用电损耗, 原有读数上加上 千瓦小时作为用电损耗, 而夏季没有此损耗问题。 而夏季没有此损耗问题。电费是每千瓦小 时电0.49元,假定用电度数为 千瓦小时, 时电 元 假定用电度数为125千瓦小时, 千瓦小时 分别计算出冬季和夏季相应的电费。 分别计算出冬季和夏季相应的电费。
观察下面的程序的运行结果: 观察下面的程序的运行结果:
class Father { int a=1,b=2; void show() { System.out.println(a+" "+b); } } class Son extends Father { int b=3,c=4; void show() { System.out.println(a+" "+b+" "+c); } } class Exp { public static void main(String[] args) { Father fa=new Father(); fa.show(); Son s=new Son(); s.show(); Father fb; fb=s; fb.show(); System.out.println(fb.a+" "+fb.b); if (fb instanceof Son) s=(Son)fb; System.out.println(s.a+" "+s.b+" "+s.c); } }
class Xuesheng { public static void main(String[] args) { Student s1=new Student("tct1",18,67,89); s1.show(); s1.print(); } }
问题: 若将Student类中的 类中的show()方法名改为 方法名改为print(),主函数 若将 类中的 方法名改为 主函数 内容改为如下,执行结果又如何? 内容改为如下,执行结果又如何?
2、父类对象向子类对象赋值 、
父类对象向子类对象赋值时Hale Waihona Puke Baidu必须使用显式转换, 父类对象向子类对象赋值时,必须使用显式转换,即强制 类型转换: 类型转换 子类对象=(子类名 父类对象 子类对象 子类名)父类对象 子类名
1、理解题意。 、理解题意。 2、上机之前在作业本上写出程序。 、上机之前在作业本上写出程序。 3、记录调试程序时出现的错误,在作业本上说明出错 、 记录调试程序时出现的错误, 的原因。 的原因。
三 、类对象之间的类型转换
1、 子类对象向父类对象赋值 ( 扩大转换是 、 子类对象向父类对象赋值( 安全的) 安全的)
习题课
• • • •
静态成员 多态 抽象类 接口
一、静态变量与静态方法 ●静态变量相当于全局变量。 静态变量相当于全局变量。 静态方法只能访问静态变量。 ●静态方法只能访问静态变量。 静态成员可以用类访问。 ●静态成员可以用类访问。
二、 继承中方法的调用问题
Java规定,执行对象的方法时,首先在 规定,执行对象的方法时, 规定 对象所属的类中进行检查, 对象所属的类中进行检查,是否有与要执 行的方法同名、同参数的方法( 行的方法同名、同参数的方法(是否有能 匹配的方法),若有,就调用该方法。 ),若有 匹配的方法),若有,就调用该方法。否 就到父类中检查能匹配的方法, 则Java就到父类中检查能匹配的方法,如 就到父类中检查能匹配的方法 就调用该方法。 有,就调用该方法。否则就继续沿着继承 链向上查找,直到找到能匹配的方法。 链向上查找,直到找到能匹配的方法。若 在整个链中都找不到能匹配的方法, 在整个链中都找不到能匹配的方法,则将 产生编译错误。 产生编译错误。
class Student extends Person { private float java,english; Student(String n,int a, float j,float e) { super(n,a); java=j; english=e; } void show() { System.out.println(“java score is ”+java+”.”); System.out.println(“eng score is ”+english+”.”); } }
上机作业: • 题目:开发一个员工管理系统,员工 (Employee)有三个属性:姓名、工号和工资, )有三个属性:姓名、工号和工资, 用继承的方法设计一个经理类。 要求设计出对 用继承的方法设计一个经理类 。 员工进行初始化的构造方法, 练习类的继承、 员工进行初始化的构造方法 , 练习类的继承 、 方法的覆盖、属性的隐藏, 的用法。 方法的覆盖 、 属性的隐藏 , this和super的用法。 和 的用法 • 要求: 要求:
五、接口的定义、实现、意义
• 详细内容见接口课件。
例题
• 例1 定义接口来实现描述自己为不同角色的 信息。 信息。 • 例2 定义抽象类和接口, 定义抽象类和接口,分别计算圆和矩形 的面积。 的面积。
class Xuesheng { public static void main(String[] args) { Student s1=new Student("tct1",18,67,89); s1.print(); Person s2=new Person("tct2",23); s2.print(); } } 说明: 说明: 从表面上看, 都是要求执行print()方 从表面上看, s1.print()和 s2.print()都是要求执行 和 都是要求执行 方 实际上, 法,实际上,Java根据对象所在的继承层次中的位置来确定执 根据对象所在的继承层次中的位置来确定执 行哪种方法。方法的形式相同,而对象的响应不同, 行哪种方法。方法的形式相同,而对象的响应不同,这是一种 多态的表现形式。多态的表现方式是哪两种? 多态的表现形式。多态的表现方式是哪两种?
例: class Person { String name; private int age; Person(String n,int a) { name=n; age=a; } public void print() { System.out.println(“My name is ”+name+”.”); } }
四 、抽象类的定义、使用
• 含有抽象方法的类必须定义成抽象类。 含有抽象方法的类必须定义成抽象类。 修饰, • 抽象方法用 抽象方法用abstract修饰,它没有方法体。 修饰 它没有方法体。 • 抽象类的抽象方法由其子类实现。 抽象类的抽象方法由其子类实现。 抽象方法由其子类实现
举例
电在传输上都会有损耗, 电在传输上都会有损耗,假如计算电费 时区分冬季和夏季用电情况, 时区分冬季和夏季用电情况,冬季在用电 原有读数上加上20千瓦小时作为用电损耗 千瓦小时作为用电损耗, 原有读数上加上 千瓦小时作为用电损耗, 而夏季没有此损耗问题。 而夏季没有此损耗问题。电费是每千瓦小 时电0.49元,假定用电度数为 千瓦小时, 时电 元 假定用电度数为125千瓦小时, 千瓦小时 分别计算出冬季和夏季相应的电费。 分别计算出冬季和夏季相应的电费。
观察下面的程序的运行结果: 观察下面的程序的运行结果:
class Father { int a=1,b=2; void show() { System.out.println(a+" "+b); } } class Son extends Father { int b=3,c=4; void show() { System.out.println(a+" "+b+" "+c); } } class Exp { public static void main(String[] args) { Father fa=new Father(); fa.show(); Son s=new Son(); s.show(); Father fb; fb=s; fb.show(); System.out.println(fb.a+" "+fb.b); if (fb instanceof Son) s=(Son)fb; System.out.println(s.a+" "+s.b+" "+s.c); } }
class Xuesheng { public static void main(String[] args) { Student s1=new Student("tct1",18,67,89); s1.show(); s1.print(); } }
问题: 若将Student类中的 类中的show()方法名改为 方法名改为print(),主函数 若将 类中的 方法名改为 主函数 内容改为如下,执行结果又如何? 内容改为如下,执行结果又如何?