java面试题

hunniman 2013-05-23 08:44:48
1,能否利用面向对象的多态的概念,做一个模拟两个小朋友说话的简单程序:男同学说“Hello”,女同学说“World”。(也就是,输出 “Boy, to say: Hello")。

主程序请简单依次生成对象,放进一个数据结构,然后简单循环完成行为;设计的重点应该放在类之间的关系和不同类的知识的分配。

我们只是要求简单指示,文本输出;请不要在通讯细节或者对话回合上复杂化了。也不需要Proxy,InvocationHandler,Reflection 等手法。





2,在这个版本的基础上:
- 保留现有的关于人的各个类
- 另外建立一个独立的负责行为(say)的类,把人类的实例作为代理
- 人类集中管理对话的内容和自己的称谓,不直接参与输出;行为类负责动作的描述和输出。







3,在这个版本的基础上,如果我们假定不只是有“说”这个概念, 还增加了“唱”的概念。(说唱是概念上的而已,输出上还是println “boy to sing: hello" “girl to say: world" 等等,就可以了)而我们是可以设定不同的人用不同的行为来表达的。

重要一点,我们希望把这两种行为依然是作为类各自封装起来。

在新的版本的主程序中,我们直接设定动作和人物就可以了,(不必要用循环语句了),例如,要男孩说,而女孩唱,或者女孩说,男孩唱。

(三个题目是有关联的)
...全文
350 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
熊猫无敌 2013-05-24
  • 打赏
  • 举报
回复
1. 就是最简单的多态 思路:男女可以继承一个抽象类,各自实现Say的方法,同时也建立一个getWord,getGender方法, 类似于Say() { System.out.println(getWord()); } 2. 有点象策略模式的变形 Action类接收男女的具体类,然后根据具体类的word和gender控制输出 3. 第三个象是桥接模式和策略模式的综合,关键是接收两个参数(男女具体类和行为),用多态 但是可以比较灵活实现 楼上装饰模式应该是不太像,装饰模式应该是男孩既能唱,又能跳,强调的是不改变原功能的情况下做功能的叠加
hunniman 2013-05-24
  • 打赏
  • 举报
回复
引用 10 楼 oh_Maxy 的回复:
方法名定义的不合理,改下:
public interface Human
{
    //获得性别
    String getSex();
    //获得说话内容
    String getWords();
}
这样就ok了,给第一题用的时候可以这样: Human h = new ....();//Boy or Girl System.out.println(h.getSex()+", to say:"+h.getWords());
和我的想法一样,,我也不知符不符合,哈哈
oh_Maxy 2013-05-24
  • 打赏
  • 举报
回复
方法名定义的不合理,改下:
public interface Human
{
    //获得性别
    String getSex();
    //获得说话内容
    String getWords();
}
这样就ok了,给第一题用的时候可以这样: Human h = new ....();//Boy or Girl System.out.println(h.getSex()+", to say:"+h.getWords());
oh_Maxy 2013-05-24
  • 打赏
  • 举报
回复
一开始没想清楚,其实sayHello应该改为getWords的,功能只是获得要说的内容。
hunniman 2013-05-24
  • 打赏
  • 举报
回复
引用 7 楼 oh_Maxy 的回复:
用静态代理,咱也写了个,看看还符合要求:
public interface Human
{
    //获得性别
    String getSex();
    //获得说话内容
    String sayHello();
}
public class Boy
    implements Human
{

    public String sayHello()
    {
        return "Hello";
    }

    public String getSex()
    {
        return "Boy";
    }
}
public class Girl
    implements Human
{

    public String sayHello()
    {
        return "World";
    }
    
    public String getSex()
    {
        return "Girl";
    }
}
public interface Say
{
    void say();
}
/**
 * 说  的代理类
 */
public class SayProxy
    implements Say
{

    private Human human;

    public SayProxy(Human human)
    {
        this.human = human;
    }

    public void say()
    {
        System.out.println(human.getSex() + ", to say:" + human.sayHello());
    }
}
public interface Sing
{
    void sing();
}
/**
 * 唱 的代理类
 */
public class SingProxy
    implements Sing
{

    private Human human;

    public SingProxy(Human human)
    {
        this.human = human;
    }

    public void sing()
    {
        System.out.println(human.getSex() + ", to sing:" + human.sayHello());
    }
}
public class TestProxy
{

    public static void main(String[] args)
    {
        //男孩女孩定义
        Human boy = new Boy();
        Human girl = new Girl();

        //男孩说
        Say boySay = new SayProxy(boy);
        boySay.say();
        //女孩唱
        Sing girlSing = new SingProxy(girl);
        girlSing.sing();

        //女孩说
        Say girlSay = new SayProxy(girl);
        girlSay.say();
        //男孩唱
        Sing boySing = new SingProxy(boy);
        boySing.sing();
    }
}
Human 人类不能有动作sayHello吧? 看看题目
oh_Maxy 2013-05-24
  • 打赏
  • 举报
回复
用静态代理,咱也写了个,看看还符合要求:
public interface Human
{
    //获得性别
    String getSex();
    //获得说话内容
    String sayHello();
}
public class Boy
    implements Human
{

    public String sayHello()
    {
        return "Hello";
    }

    public String getSex()
    {
        return "Boy";
    }
}
public class Girl
    implements Human
{

    public String sayHello()
    {
        return "World";
    }
    
    public String getSex()
    {
        return "Girl";
    }
}
public interface Say
{
    void say();
}
/**
 * 说  的代理类
 */
public class SayProxy
    implements Say
{

    private Human human;

    public SayProxy(Human human)
    {
        this.human = human;
    }

    public void say()
    {
        System.out.println(human.getSex() + ", to say:" + human.sayHello());
    }
}
public interface Sing
{
    void sing();
}
/**
 * 唱 的代理类
 */
public class SingProxy
    implements Sing
{

    private Human human;

    public SingProxy(Human human)
    {
        this.human = human;
    }

    public void sing()
    {
        System.out.println(human.getSex() + ", to sing:" + human.sayHello());
    }
}
public class TestProxy
{

    public static void main(String[] args)
    {
        //男孩女孩定义
        Human boy = new Boy();
        Human girl = new Girl();

        //男孩说
        Say boySay = new SayProxy(boy);
        boySay.say();
        //女孩唱
        Sing girlSing = new SingProxy(girl);
        girlSing.sing();

        //女孩说
        Say girlSay = new SayProxy(girl);
        girlSay.say();
        //男孩唱
        Sing boySing = new SingProxy(boy);
        boySing.sing();
    }
}
hunniman 2013-05-24
  • 打赏
  • 举报
回复
贴下小弟代码,求批斗: public class Boy { private String word; private Action action; public String getWord() { return word; } public void setWord(String word) { this.word = word; } public Action getAction() { return action; } public void setAction(Action action) { this.action = action; } } public class Girl { private String word; private Action action; public String getWord() { return word; } public void setWord(String word) { this.word = word; } public Action getAction() { return action; } public void setAction(Action action) { this.action = action; } } public interface Action { void doSomething(String content); } public class Say implements Action{ public void doSomething(String content) { // TODO Auto-generated method stub System.out.println("this action is say :"+content); } } public class Sing implements Action{ public void doSomething(String content) { // TODO Auto-generated method stub System.out.println("this action is sing :"+content); } } public static void main(String[] args) { Boy boy=new Boy(); boy.setWord("boy, say hello"); Girl gril=new Girl(); gril.setWord("girl,sing world"); Action sayAction=new Say(); Action singAction=new Sing(); boy.setAction(sayAction); gril.setAction(singAction); boy.getAction().doSomething(boy.getWord()); gril.getAction().doSomething(gril.getWord()); }
hunniman 2013-05-24
  • 打赏
  • 举报
回复
引用 4 楼 u010682529 的回复:
多點分啊,樓主
加了,要多少分?
-騎豬看海- 2013-05-24
  • 打赏
  • 举报
回复
多點分啊,樓主
hunniman 2013-05-24
  • 打赏
  • 举报
回复
关键是第三题有点不明白啊,求教。
chengxu2011 2013-05-23
  • 打赏
  • 举报
回复
个人感觉考的是静态代理模式和装饰模式。。。。
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

62,634

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧