《Java技术》第五次作业

本文总结了Java面向对象编程的基本概念,包括类的设计、接口的使用及其实现,并通过具体案例如汽车租赁系统和音乐盒播放系统进行了深入解析。

《Java技术》第五次作业

(一)学习总结

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

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

  • 设计思路
    (1)将客车的有载客量,货车的有载货量,分别设计为一个接口。
    (2)出租汽车设计成抽象类,包括编号、名称、租金属性。
    (3)客车、货车、皮卡分别继承出租汽车类,再分别实现应有的接口。
    1079941-20170425094257709-2103508851.png

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();
    }
}

代码不能通过

  • 原因
    (1)在接口中声明的方法必须是public abstract,也是系统默认的,而本题中省略了,但在类中实现接口所定义的方法时,方法的声明必须和接口中定义的完全一致,类中必须显示使用public修饰符。
    (2)非抽象类必须实现接口中的所有方法。

  • 改正

      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 类的源码,说明是如何实现的?如果现在希望对输出的结果进行降序排序,该如何处理?修改上述代码,实现按照字母顺序逆序排序。

源代码

    public final class String
    implements java.io.Serializable, Comparable<String>, CharSequence{
    private final char value[];
    private int hash;
    private static final ObjectStreamField[] serialPersistentFields =new ObjectStreamField[0];
    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;
    }

修改

    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]);
            }
        }
    }

(二)实验总结

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

  • 程序设计思路
    (1)将MusicBox设计为接口,在接口中定义音乐盒播放的方法。
    (2)分别新建PianoBox类、ViolinBox类,在类中实现接口中定义的play方法。
    (3)建MusicBoxFactory类,将MusicBox实例化。
    (4)测试类,用户输入即将播放的音乐盒,实现了MusicBox的实例化,调用play()方法并输出。

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

  • 程序设计思路
    (1)建员工类,具有编号,姓名,性别的属性,员工和部门设置联系,添加Dept类的对象,并且定义两个属性Date类型的,出生日期和参加工作时间,写一个对日期输出格式的格式化方法和一个使用Comparable接口比较生日大小的方法。
    (2)建部门类,具有部门编号,部门姓名属性,设置与员工类的联系,定义员工类的对象和对象数组。
    (3)写Comparator接口,实现员工生出生日期的排序,在接口中写比较方法和equals方法。
    (4)测试类,实例化员工的信息并输出,还要输出两种比较员工出生年月的结果。

  • 问题
    不知道Date类的两个属性在哪里定义,起初在测试类直接建Date类的对象,并转化成String类型并输出。

  • 原因
    没有建立联系,出生年月和参加工作时间都是属于员工的。

  • 解决方案
    应该在员工类里定义两个属性,然后在输出时以格式化方式输出日期。

    public String toString(){
    return "员工编号: "+this.eno+" 姓名: "+this.ename+" 性别: "+this.sex+" 生日:"+new SimpleDateFormat("yyyy-MM-dd").format(birth) +"参加工作时间:"+new SimpleDateFormat("yyyy-MM-dd").format(date);
    }

3.在案例宠物商店的基础上,实现以下功能:

(1)展示所有宠物

(2)购买宠物

(3)显示购买清单

  • 程序设计思路
    (1)在宠物商店类中定义输出宠物的方法print()。
    (2)在主方法中,建宠物商店类型的对象,写一个返回宠物价钱的方法,当调用查找宠物的方法和用户输入的宠物名字相比较,一致时,返回宠物价钱,再用数组存储,并计算宠物的总价钱。
  • 问题
    这次题目有点复杂,没有达到题目要求,我的这个程序是对它的理解,接下来多看书了解方法内容,再重构。

(三)代码托管

  • 码云commit历史截图

1079941-20170425121457115-1793708023.png

转载于:https://www.cnblogs.com/li-yumeng/p/6761427.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值