A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 HM汪磊 于 2013-5-26 15:42 编辑

此贴为与答题送分活动相对应的帖子,会公布各位云丝回答中相对详细的回答!!
我会以回复的方式定期公布!!


5.12日答案:

5.19日答案:



张俊生 5.19日题目.rar

3.86 KB, 下载次数: 68

评分

参与人数 1技术分 +1 黑马币 +12 收起 理由
曹睿翔 + 1 + 12 磊哥有空整理一下,问题附打包的答案,看着.

查看全部评分

20 个回复

倒序浏览
5.5题目:

1. 装饰类与继承的区别?什么时候用装饰类?什么时候用继承?(要有代码)
2. 什么是泛型?什么时候用?怎么用?(要有代码)

解答:

1.
区别
a) 继承相对装饰来说,体系臃肿,更加复杂,而且意图不明确。
b) 装饰类降低了类与类之间的关系,增强了意图和功能型需求。

什么时候使用
如果要增强功能的话,只需要把 被装饰的类的对象当成装饰类的构造函数的参数传递进来,写相应的增强的方法即可,这个方法如果错误也不会影响原来的方法的使用。
如果不是增强功能,而又其他的目的或者说需要用到父类的方法,那么就采用继承就可以了

代码如下:用的就是毕老师上课的代码。

package com.itheima;

/*
* 装饰设计模式:
* 当想要对已有的对象进行功能增强时,
* 可以定义类,将已有对象传入,基于已有对象的功能,并提供加强功能
* 那么自定义的该类就称为装饰类
*
* 装饰类通常会通过构造方法接收被装饰的对象。
* 并基于被装饰的对象的功能,提供更强的功能。
*/
public class PersonDemo {

        /**
         * @param args
         */
        public static void main(String[] args) {
                // TODO Auto-generated method stub
                Person p = new Person();
               
                p.chifan();
        }

}

//原来的类
class Person {
        public void chifan() {
                System.out.println("吃饭");
        }
}

//增强了的类,就是装饰类
class SuperPerson {
        private Person p = null;
       
        SuperPerson(Person p){
                this.p = p;
        }
       
        public void superChifan() {
                System.out.println("开胃酒");
                p.chifan();
                System.out.println("吃甜点");
        }
}

2.

泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。 Java语言引入泛型的好处是安全简单。

什么时候用泛型?我认为使用泛型不是必须的,不过最好使用泛型。在使用类、接口和方法时都可以使用泛型,使用集合类的时候尽量使用即可

怎么用泛型?举一个最简单的例子哈
代码如下:
//首先声明一个泛型,并且写上get 和set方法
class Point<T>{
    private T var;
    public T getVar(){
        return var;
    }
    public void setVar(T var){
        this.var=var;
    }
}
2、使用Point类将var的类型设置成整数
public class Test{
    public static void maint(String[] args){
    Point<Integer> p=new Point<Integer>();//var类型为Integer
    p.setVar(30);//设置数字,自动装箱
    System.out.println(p.getVar() * 2);
    }
}
回复 使用道具 举报
我先来顶!!磊哥起来的很早啊
回复 使用道具 举报
没有占到一楼,顶一下
回复 使用道具 举报
支持一个。
回复 使用道具 举报
围观,学习、、
回复 使用道具 举报
学习了。回答的好,思路清晰!!
回复 使用道具 举报
学习{:soso_e187:}
回复 使用道具 举报
沈艳南 来自手机 中级黑马 2013-5-6 14:06:09
9#
我是来学习的,一楼回答的已经很详细了!
回复 使用道具 举报
昨天认真做了这个问题,这种方式确实很很有效,让大家印象更深刻,希望一直继续,督促大家进步,谢谢楼主
回复 使用道具 举报
liuelxiwd 发表于 2013-5-6 15:34
昨天认真做了这个问题,这种方式确实很很有效,让大家印象更深刻,希望一直继续,督促大家进步,谢谢楼主 ...

会的,希望都好好学习!!!
回复 使用道具 举报
学习一下。。。
回复 使用道具 举报
5.6日题目答案!请自行下载查看

傻瓜一点红.rar

6.18 KB, 下载次数: 74

回复 使用道具 举报
5.7日答案:张林敏同学提供
package cn.itcast.exercise1;

import java.util.ArrayList;

public class Main {

        /**
         * @param args
         */
        public static void main(String[] args) {
                TicketSealCenter tCenter = TicketSealCenter.newInstance();
               
                //生成3个售票窗口
                SealWindow sWindow1=new SealWindow(tCenter);
                SealWindow sWindow2=new SealWindow(tCenter);
                SealWindow sWindow3=new SealWindow(tCenter);

                try {
                        //售票窗口开始卖票
                        sWindow1.start();
                        sWindow2.start();
                        sWindow3.start();
                       
                        //进行售票10秒钟
                        Thread.sleep(10000);
                } catch (InterruptedException e) {
                        e.printStackTrace();
                }finally{
                        //售票窗口停止售票
                        sWindow1.stop();
                        sWindow2.stop();
                        sWindow3.stop();
                }
        }

}

class SealWindow extends Thread {
        private TicketSealCenter ticketSealCenter;

        public SealWindow(TicketSealCenter ticketSealCenter) {
                super();
                this.ticketSealCenter = ticketSealCenter;
        }

        @Override
        public void run() {
                System.out.println("售票大厅:"+this.getName()+" 已开始卖票.");
                while (true) {
                        //模拟生成用户需要购买的票的id
                        int id = (int) (Math.random()*10 % 3);
                        //获取当前售票大厅所售票的信息
                        ArrayList<Ticket1> tickets = ticketSealCenter.getTickets();
                        for (Ticket1 ticket : tickets) {
                                //判断是否有票
                                if (ticket.getId() == id) {
                                        //判断当前这种票是否还有票卖
                                        if (ticket.getQuantity()>0) {
                                                ticket.setQuantity(ticket.getQuantity()-1);
                                                System.out.println("售票大厅:"+this.getName()+" 已售出票:"+ticket.getName()+" 还剩张数:"+ticket.getQuantity());
                                        }else {
                                                System.out.println(ticket.getName()+"已经没有票买了...");
                                        }
                                        break;
                                }//END If
                        }//END For
                        try {
                                //没卖一张票的时间
                                Thread.sleep(100);
                        } catch (InterruptedException e) {
                                e.printStackTrace();
                        }
                }
        }

}
class Ticket1 {
        //属性
        private int id=0;
        private String name;
        private int quantity;
        //统计当前类生成多少个对象
        private static int count=0;
       
        //实体类的构造函数
        public Ticket1(String name, int quantity) {
                super();
                id = count++;
                this.name = name;
                this.quantity = quantity;
        }       
       
        public int getId() {
                return id;
        }
        public String getName() {
                return name;
        }
        public void setName(String name) {
                this.name = name;
        }
        public int getQuantity() {
                return quantity;
        }
        public void setQuantity(int quantity) {
                this.quantity = quantity;
        }
       
}

class TicketSealCenter {
        //存放票
        private ArrayList<Ticket1> tickets = null;
        private static TicketSealCenter ticketSealCenter = null;

        public ArrayList<Ticket1> getTickets() {
                return tickets;
        }

        //构造函数、生成票
        public TicketSealCenter() {
                tickets = new ArrayList<Ticket1>();
                tickets.add(new Ticket1("[北京 -> 上海]",30));
                tickets.add(new Ticket1("[北京 -> 香港]",30));
                tickets.add(new Ticket1("[北京 -> 台湾]",30));
        }
       
        //生成一个统一的售票大厅
        public static TicketSealCenter newInstance(){
                if (ticketSealCenter == null) {
                        ticketSealCenter = new TicketSealCenter();
                }
                return ticketSealCenter;
        }
}
回复 使用道具 举报
5.8日答案:

接口.rar

7.41 KB, 下载次数: 75

回复 使用道具 举报
学习啦!
回复 使用道具 举报
顶一个,我先睡了
回复 使用道具 举报
我也来顶下
回复 使用道具 举报
有时间得多整理一下,太多只是需要学习
回复 使用道具 举报
磊哥有空整理一下,问题附打包的答案
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马