Java 习题5 参考答案及解析(2)

阅读程序

(1)请说出E类中【代码1】和【代码2】的输出结果。

Java
class 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】的输出结果。

Java
class 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】的输出结果。

Java
class 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】的输出结果。

Java
class 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());

编程题解析

Java
Animal.java
public abstract class Animal{
    public abstract void cry();
    public abstract String getAnimalName();
}

Simulator.java
public class Simulator{
    public void playSound(Animal animal){
        System.out.println("现在播放"+animal.getAnimalName()+"类的声音:");
        animal.cry();
    }
}
Dog.java
public class Dog extends Animal{
    public void cry(){
        System.out.println("汪汪...汪汪");
    }
    public String getAnimalName(){
        return "狗";
    }
}
Cat.java
public class Cat extends Animal{
    public void cry(){
         System.out.println("喵喵...喵喵");
     }
      public String getAnimalName(){
        return "猫";
    }
}

Application.java
public class Test{
    public static void main(String args[]){
        Simulator simulator = new Simulator();
        simulator.playSound(new Dog());
        simulator.playSound(new Cat());
    }
}
  • 76
    点赞
  • 230
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
java面试笔试资料java笔试题大集合及答案题库java笔试题汇总资料188个合集 100家大公司java笔试题汇总.doc 125条常见的java 面试笔试题大汇总.pdf 2011最新整理java经典代码.doc 25个经典的Spring面试问答.docx JavaEE学习笔记.pdf java_Java_学习笔记.pdf Java_Performance.pdf java代码效率优化.docx Java内存模型的历史变迁.docx Java在游戏服务器开发中的应用.docx java基础总结大全.txt Java开发与技术挑战——关于技术的技术思考.docx Java框架研发思考.docx Java程序员们最常犯的10个错误.docx java程序员的就业指导(重点).docx Java程序员面试宝典 .pdf java笔试题大集合及答案 Java经典项目集锦.rar JAVA编程题全集(100题及答案).doc Java面试文档题库 Java面试笔试题库.CHM java面试笔试题库资料合集.zip Java面试问题集.pdf Java面试题以及答案(小生).pdf java面试题(题库全).doc JS 数据库答案.doc Land.the.Tech.Job.You.Love-人人都有好工作—IT行业求职面试必读.pdf Linux命令大全完整版.doc sql查询语句练习.doc Web服务器的工作原理.docx 依赖注入与JSR-330的参考实现——Guice.docx 关于Java框架Vert.x的几点思考.docx 关于堆和栈的那些事.docx 写好Java代码的30条经验总结.docx 华为java笔试面试题2014.doc 多态的理解.docx 大公司最喜欢问的Java集合类面试题.docx 大公司的Java面试题集.doc 就业相关java 广州传智播客JavaEE工程师测试题.doc 广州传智播客JavaEE工程师测试题(带答案的).doc 应聘时最漂亮的回答.docx 当面试官问「你有什么要问我的吗」时,应该问什么?.docx 提高 Java 代码性能的各种技巧.docx 搜狗商业平台Java技术实践.docx 最新JAVA编程题全集(50题及答案).doc 百度历年笔试面试150题.docx 笔试1.doc 答案1.doc 细品这杯香浓的咖啡——阿里中间件高级专家沈询的Java之旅.docx 给你一次机会面试架构师 你会问什么问题?.docx 超全面:程序员跳槽神级攻略.docx 跳还是不跳,是一个问题——跳槽时该如何权衡?.docx 进入IT企业必读的324个JAVA面试题.pdf 阿里2015实习生-客户端笔试题目解析.docx 面试帮-IT面试宝典.apk 面试题库 高吞吐低延迟Java应用的垃圾回收优化.docx 黑马程序员入学Java精华总结.pdf

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值