2017《JAVA技术》第五次作业

Java第五次作业--面向对象高级特性(抽象类和接口)

(一)学习总结

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

参考资料: XMind

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

工具:PowerDesigner
参考教程:UML 简介

1:新建汽车类,并且拥有编号,名称,租金三个基本属性并设置相应的get()和set()方法,toString()方法输出,设置租金的抽象方法public static dvoid money();
2:客车,货车,皮卡三个类继承汽车类拥有自己的属性,并且用super调用父类属性,同时覆写租金的抽象方法。
3.请顾客输入想要租哪种车

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

不能通过编译。接口中有三个方法都要在子类Dog中覆写,将eat()方法可视性改为public

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

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 int compareTo(String anotherString) {
            int len1 = count;
            int len2 = anotherString.count;
            int n = Math.min(len1, len2);
            char v1[] = value;
            char v2[] = anotherString.value;
            int i = offset;
            int j = anotherString.offset;
            if (i == j) {
                int k = i;
                int lim = n + i;
                while (k < lim) {
                char c1 = v1[k];
                char c2 = v2[k];
                if (c1 != c2) {
                    return c1 - c2;
                }
                k++;
                }
            } else {
                while (n-- != 0) {
                char c1 = v1[i++];
                char c2 = v2[j++];
                if (c1 != c2) {
                    return c1 - c2;
                }
                }
            }
            return len1 - len2;
            }

降序:

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.其他需要总结的内容。

(二)实验总结

完成实验内容,代码上传到码云,并对完成实验内容过程中遇到的问题、解决方案以及程序的设计思路和思考等进行归纳总结。
格式如下:
第一题:
程序设计思路:MusicBox为接口并设置play()方法,两个子类PianoBox,ViolinBox重写play()方法,设置工厂类MusicBoxFactory 产生MusicBox的实例 ,然后让用户来选择想要的音乐盒。
第二题:
程序设计思路:把员工的工作时间和生日用日期类来表示,利用日期类来得到值,返回相应的new SimpleDateFormat("yyyy-mm-dd").format(BirthDate)。
comparable接口,覆写compareTo方法来实现排序,comparator是比较器接口。
问题:输出结果为this.num,this.name,原因是在写toString()方法在返回时加了双引号"this.num"。
数组实例化出错:

   Dept dept[]=new Dept[2];
   Dept dept[0]=new Dept(01,"sa","a1");
   Dept dept[1]=new Dept(02,"sb","b1");


    Dept dept[]=new Dept[2];
	dept[0]=new Dept(01,"sa","a1");
    dept[1]=new Dept(02,"sb","b1");

在用comparator比较时出错

  if (o1.getBirthDate() > o2.getBirthDate()) { 
                return 1; 
         } else if (o1.getBirthDate() < o2.getBirthDate) { 
            return -1; 
        } else { 
              return 0; 
       } 

正确为:因为BirthDate设置的为日期类

 if (o1.getBirthDate() .compareTo (o2.getBirthDate())==1 ) { 
                  return 1; 
           } else if (o1.getBirthDate() .compareTo (o2.getBirthDate())==-1 ) { 
              return -1; 
          } else { 
                return 0; 
         } 

第三题:
程序设计思路:创建一个Pet接口,然后class Cat implements Pet,class Dog implement Pet,然后建一个Factory类相当于卖宠物的店,最后测试类把商店里的宠物输出供顾客选择。
在Factory中查询符合条件的宠物,然后将信息保存输出,利用if语句判断顾客所需要的颜色或者品种是否为空。利用count++把所符合条件的输出。

(三)代码托管(务必链接到你的项目)
http://git.oschina.net/hebau_cs15/Java-cs02QSM/commits/master

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

posted on 2017-04-25 16:01  昨夜蔷薇  阅读(171)  评论(1)    收藏  举报