Java 习题5 参考答案及解析(2)
来源:互联网 发布:数据库系统开发 编辑:程序博客网 时间:2024/05/20 19:46
阅读程序
(1)请说出E类中【代码1】和【代码2】的输出结果。
Javaclass A{ double f(double x,double y){ return x + y; }}class B extends A{ double f(int x,int y){ return x*y; }}public class E{public static void main(String args[]){ B b = new B(); System.out.println(b.f(3,5)); //【代码1】 System.out.println(b.f(3.0,5.0)); //【代码2】 }}
(2)请说出B类中【代码1】好【代码2】的输出结果。
Javaclass A{ public int getNumber(int a){ return a+1; }}class B extends A{ public int getNumber(int a){ return a+100; } public static void main(String args[]){ A a = new A(); System.out.println(a.getNumber(10)); //【代码1】 a = new B(); System.out.println(a.getNumber(10)); //【代码2】 }}
(3)请说出E类中【代码1】~【代码4】的输出结果。
Javaclass A{double f(double x,double y){ return x+y;} static int g(int n){ return n*n; }}class B extends A{ double f(double x,double y){ double m = super.f(x,y); return m+x*y; } static int g(int n ){ int m = A.g(n); return m+n; }}public class E{ public static void main(String args[]){ B b = new B(); System.out.println(b.f(10.0,8.0)); //【代码1】 System.out.println(b.g(3)); //【代码2】 A a = new B(); System.out.println(a.f(10.0,8.0)); //【代码3】 System.out.println(a.g(3)); //【代码4】 }}
(4)请说出E类中【代码1】~【代码3】的输出结果。
Javaclass A{ int m; int getM(){ return m; } int seeM(){ return m; }}class B extends A{ int m; int getM(){ return m+100; }}public class E{public static void main(String args[]){ B b = new B(); b.m = 20; System.out.println(b.getM());//【代码1】 A a = b; a.m = -100; //上转型对象访问的是被隐藏的m System.out.println(a.getM());//【代码2】上转型对象调用的一定是子类重写的getM()方法 System.out.println(b.seeM());//【代码3】子类继承的seeM()方法操作的m是被子类隐藏的m }}
阅读程序解析
1.【代码1】15.0 。【代码2】 8.0
B类继承了A类,但是B中的f方法并不是重写A类中的(参数类型不同),【代码1】调用f传两个int,实际调用的是B类自己的方法,返回值是double,所以输出15.0 。【代码2】调用f传两个double,调用的是继承自A类的方法,输出8.0 。
2.【代码1】:11。 【代码2】:110 。
对象a是A类的对象,调用的是A类自己的方法,接着让a实例化B类,a称为上转型对象,此时调用的是子类重写父类的方法。
3.【代码1】:98.0 。 【代码2】:12 。【代码3】:98.0 。 【代码4】:9
代码1调用b对象的f方法,b对象是B类实例化的,调用的是B类自己的f方法,传入10.0和8.0后,用super关键字调用了父类的f方法,得到18.0赋值给m,最后返回18.0+10.0*8.0也就是98.0。
【代码2】调用B类中的静态方法g传入3,方法内又去调用父类中的g方法传入3,得到9赋值给m后,输出9+3也就是12。
【代码3】a对象是上转型对象,上转型对象可以调用重写父类的方法以及父类派生的方法,所以a调用的f方法是它重写的方法,那么具体过程就跟【代码1】相同,答案为98.0
【代码4】在于g方法是静态方法,静态方法是不允许被重写的,所以B类中的g方法相当于该类特有的方法,那么a调用的g方法实际上是父类的,输出结果为9 。
4.【代码1】:120 【代码2】:120 【代码3】-100
详情请看题目代码中的注释。
编程题
设计一个动物声音“模拟器”,希望模拟器可以模拟许多动物的叫声,要求如下。
编写抽象类Animal
Animal抽象类有两个抽象方法cry()和getAnimalName(),即要求各种具体的动物给出自己的叫声和种类名称。编写模拟器类Simulator
该类有一个playSound(Animal animal)方法,该方法的参数是Animal类型,即参数animal可以调用Animal的子类重写的cry()方法播放具体动物的声音,调用子类重写的getAnimalName()方法显示动物种类的名称。编写Animal的子类:Dog和Cat类
- 编写主类Application(用户程序)
在主类Application的main方法中至少包含如下代码:
Simulator simulator = new Simulator();simulator.playSound(new Dog());simulator.playSound(new Cat());
编程题解析
JavaAnimal.javapublic abstract class Animal{ public abstract void cry(); public abstract String getAnimalName();}Simulator.javapublic class Simulator{ public void playSound(Animal animal){ System.out.println("现在播放"+animal.getAnimalName()+"类的声音:"); animal.cry(); }}Dog.javapublic class Dog extends Animal{ public void cry(){ System.out.println("汪汪...汪汪"); } public String getAnimalName(){ return "狗"; }}Cat.javapublic class Cat extends Animal{ public void cry(){ System.out.println("喵喵...喵喵"); } public String getAnimalName(){ return "猫"; }}Application.javapublic class Test{ public static void main(String args[]){ Simulator simulator = new Simulator(); simulator.playSound(new Dog()); simulator.playSound(new Cat()); }}
- Java 习题5 参考答案及解析(2)
- Java 习题2 参考答案及解析(2)
- Java 习题5 参考答案及解析(1)
- Java 习题3 参考答案及解析
- Java 习题1 参考答案及解析
- Java 习题6 参考答案及解析
- Java 习题8 参考答案及解析
- Java 习题9 参考答案及解析
- Java 习题7和习题10 参考答案及解析
- Java 习题4 答案及解析
- 习题5.7参考答案(傻瓜版)
- 《机器学习(周志华)》习题11.1 参考答案
- 《机器学习(周志华)》 习题9.4参考答案
- 《汇编语言程序设计教程》人民邮电出版社第二版习题及参考答案
- 第六届蓝桥杯省赛(java)C组试题及参考答案
- 第十三讲习题参考答案
- 北大ACM习题参考答案
- apue 习题4.6参考答案
- I.MX6Q(TQIMX6Q/TQE9)学习笔记——开发板的选择
- 简单写了一个MVP项目,有兴趣可以看看
- ios手机通讯录导入应用
- Springmvc maven环境配置
- Spring的JdbcTemplate语法详解
- Java 习题5 参考答案及解析(2)
- ES5中新增的Array方法详细说明
- oracle 备份及还原
- Jersey构建REST服务实战
- 用Python编写的身份证生成器
- MAVEN查看java源代码出现乱码
- go vender 的环境搭建和使用
- navMesh自动寻路
- lintcode/leetcode由易至难第12题:Majority Element