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”,设置搜索时间段,搜索本周提交历史,并截图。

浙公网安备 33010602011771号