JAVA第五次作业

1.在上周完成的思维导图基础上,补充本周的学习内容,对Java面向对象编程的知识点做一个全面的总结。

2.汽车租赁公司,出租汽车种类有客车、货车和皮卡三种,每辆汽车除了具有编号、名称、租金三个基本属性之外,客车有载客量,货车有载货量,皮卡则同时具有载客量和载货量。用面向对象编程思想分析上述问题,将其表示成合适的类、抽象类或接口,说明设计思路并画出类图。

建立父类租赁公司类,定义:汽车种类、编号、名称、租金。
建立子类客车类,继承租赁公司类,并扩展载客量。
建立子类货车类,继承租赁公司类,并扩展载货量。
建立子类皮卡类,继承租赁公司类,并扩展载货量、载客量。
建立测试类,首先输出公司内拥有车辆以及详细信息,
询问顾客是否租赁车辆。
根据顾客租车要求给出满足要求的车辆信息

3.阅读下面程序,分析代码是否能编译通过,如果不能,说明原因,并进行改正。如果能,列出运行结果

    interface Animal{    
        void breathe();
        void run();
        void eat();
    }
    class Dog implements Animal{
        public void breathe(){
            System.out.println("I'm breathing");
        }
        void eat(){
            System.out.println("I'm eating");
        }
    }
    public class Test{
        public static void main(String[] args){
            Dog dog = new Dog();
            dog.breathe();
            dog.eat();
        }
    }

不能通过。
原因:Exception in thread "main" java.lang.Error: 无法解析的编译问题:
不能降低自 Animal 继承的方法的可视性

改正:

interface Animal{    
    void breathe();
    void run();
    void eat();
}
class Dog implements Animal{
    public void breathe(){
        System.out.println("I'm breathing");
    }
    public void eat(){
        System.out.println("I'm eating");
    }
    public void run() {
        System.out.println("I'm running");
        
    }
}
public class Test{
    public static void main(String[] args){
        Dog dog = new Dog();
        dog.breathe();
        dog.eat();
        dog.run();
    }
}

运行结果:

4.运行下面的程序

    import java.util.Arrays;
    public class Test{
        public static void main(String[] args){
            String[] fruits = {"peach","banana","orange","apple"};
            Arrays.sort(fruits);
            for(int i = 0;i < fruits.length;i++)
            {
                System.out.println(fruits[i]);
            }
        }
    }

运行结果:

程序输出的结果是升序排序的。查看String 类的源码,说明是如何实现的?如果现在希望对输出的结果进行降序排序,该如何处理?修改上述代码,实现按照字母顺序逆序排序。

String 源码:

public final class String implements java.io.Serializable, Comparable<String>, CharSequence {
private final int offset;
private final int count;
public String() {
    this.offset = 0;
    this.count = 0;
    this.value = new char[0];
}
public String(String original) {
    int size = original.count;
    char[] originalValue = original.value;
    char[] v;
    if (originalValue.length > size) {
        int off = original.offset;
        v = Arrays.copyOfRange(originalValue, off, off+size);
    } else {
        v = originalValue;
    }
    this.offset = 0;
    this.count = size;
    this.value = v;
}

定义一个新的String对象时(写String类的有参构造时),定义一个新的String对象original,声明新数组originalValue,排序时,如果originalValue长度大于original对象的count(当字符串大于新的字符串original)时,对originalValue排序,排序后数组给新数组v;如果不大于,代表两个代表字符串的数组相同

修改:

import java.util.Arrays;
public class Test{
    public static void main(String[] args){
        String[] fruits = {"peach","banana","orange","apple"};
        Arrays.sort(fruits);
        for(int i = fruits.length-1;i >= 0;i--)    
        {
            System.out.println(fruits[i]);
        }
    }
}

5.其他需要总结的内容。

(二)实验总结

实验内容:
1.某工厂生产各种音乐盒,客户无需知道音乐盒的制作过程,只需知道如何播放音乐盒即可。用简单工厂设计模式实现该过程:接口MusicBox具有方法play(),两个音乐盒类PianoBox,ViolinBox,MusicBoxFactory 产生MusicBox的实例。

设计一个MusicBox接口,Pianobox类、ViolinBox类继承MusicBox接口;
设计一个MusicBoxFactory类,在MusicBoxFactory类中创建音乐盒对象,将创建对象的具体过程屏蔽隔离起来。

2.修改第三次作业的第一题,使用java.util.Date类表示职工的生日和参加工作时间,并将职工信息按照生日大小排序后输出。(分别用comparable和comparator实现)

将员工生日和工作日期设为Date类
输出员工信息时分别用Comparator、Comparatable接口把empolyee类的对象数组按照出生日期排序。

3.在案例宠物商店的基础上,实现以下功能:
(1)展示所有宠物
(2)购买宠物
(3)显示购买清单

设计父类商店,定义宠物种类。
设计子类大型狗、小型狗、猫,继承父类并扩展定义编号、颜色、价格、品种、年龄。

输出商店内动物所有详细信息

完成实验内容,代码上传到码云,并对完成实验内容过程中遇到的问题、解决方案以及程序的设计思路和思考等进行归纳总结。
格式如下:
程序设计思路:XXXXXXX
问题1:XXXXXXX
原因:XXXXXXX
解决方案:XXXXXXX
问题2:XXXXXXX
原因:XXXXXXX
解决方案:XXXXXXX

(三)代码托管(务必链接到你的项目)
•码云commit历史截图

上传实验项目代码到码云,在码云项目中选择“统计-commits”,设置搜索时间段,搜索本周提交历史,并截图。

链接:http://git.oschina.net/hebau_cs15/Java-CS02wcy

posted @ 2017-04-25 11:42  烟火、木夏  阅读(208)  评论(1编辑  收藏  举报