201621123005《Java程序设计》第六次学习总结
201621123005《java程序设计》第六周学习总结
1.本周学习总结
1.1 面向对象学习暂告一段落,请使用思维导图,以封装、继承、多态为核心概念画一张思维导图或相关笔记,对面向对象思想进行一个总结。
- 书面作业
1. clone方法
1.1 在test1包中编写Employee类,在test2包中新建一个Test类,并在其main中新建test1包中的Employee的对象,然后使用clone方法克隆一个新对象,能否成功?为什么?
不能成功,因为clone()方法使用protected来修饰的,而被protected修饰的只能是同包或是子类访问。
1.2 如果要为自定义的类覆盖clone方法,需注意什么?
需要将clone声明为public,且实现Cloneable接口
1.3 Object对象中的toString, equals, hashCode方法都使用public修饰,而clone方法却被protected修饰,请尝试解释原因。为什么不声明为public呢?
不声明为public是为了安全性,Object中的clone()方法只是浅拷贝,用protected修饰是为了让子类去重写它,实现深拷贝。
2. 内部类
2.1 使用匿名类与Lambda表达式改写题集面向对象2-进阶-多态接口内部类的题目7-2。请贴图关键代码与运 行结果,请在运行结果中出现你的学号与姓名。
2.2. 分析下列代码,回答shapeComparator所指向的对象与Comparator接口有什么关系?
Comparator<Shape> shapeComparator = new Comparator<Shape>() { @Override public int compare(Shape o1, Shape o2) { //你的代码 } };
shapeComparator使用匿名内部类实现了Comparator接口,重写了comparator方法
2.3 题集:6-1(匿名内部类)实验总结。你觉得使用匿名内部类有什么好处?
匿名内部类无需额外创建一个类,可以简化代码,隐藏操作,体现了封装型。
3. PTA实验总结
3.1 PTA(自定义接口)。并回答:相比较不写接口,直接写一个类包含IntegerStack相应的方法来说,定义IntegerStack接口,然后定义其实现类这种方式有什么好处?
更加灵活,当我们想需要更多方法时,可在接口中添加, 然后再将它实现。
3.2 PTA(静态内部类)。并回答:你觉得什么时候应该使用静态内部类?静态内部类与内部类有什么区别?
当内部类与外围类不需要联系时可以用静态内部类。区别是静态内部类不能访问外部非静态的属性和方法。
3.3 PTA(继承覆盖综合练习-Person、Student、Employee、Company)。并回答:使用Collections.sort对引用类型数组进行排序需要有一个什么前提条件?
前提是继承Comparator接口,并重写接口中的方法。
4.大作业-继续完善(尝试使用接口改造你们的系统)
4.1 现在希望将系统中购物车的操作抽象到相应的DAO接口。
4.2 为该接口定义至少两个实现(如数组、列表、文件)。截图自己负责部分的关键代码,要求出现名字与学号。
4.3 给出你们的Main程序,说明定义DAO接口的好处。
//201621123005张凯艳
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in
);
Snack []snacks1 = new Snack[15];
Snack []snacks = new Snack[80];
Snack []snacksCount = new Snack[80];
int n = 0 ;
ShoppingDao shoppingDao = new ShoppingCartDaoArray(80); System.out.println("\t**********货品清单**********");
System.out.println("\t编号\t\t商品名称\t\t商品单价");
for (Snack e: snacks1) {
System.out.println("\t"+e.getNumber()+"\t\t"+ e.getName()+"\t\t" + e.getPrice());
}
System.out.print("\t\tWelcome~~~~\n\t请选择要购买的商品编号:");
while(sc.hasNext())
{
int number = sc.nextInt();
if (number == 0)
break;
snacks[n] =snacks1[number-1];
System.out.print("\t请输入要购买的数量:");
int num = sc.nextInt();
snacks[n].setCount(num);
shoppingDao.addSnack(snacks[n]);
System.out.print("\t加入购物车成功!\t如果继续添加请输入商品编号,否则输入0结束!\n\t请输入:");
n++;
}
System.out.println("*****User:201621123005张凯艳*****");
System.out.println("\t\t++++++购物车列表++++++");
shoppingDao.displayAllGoods();
shoppingDao.totalAllPrice();
shoppingDao.delSnack(snacks[1]);
}
}
5. 代码阅读:PersonTest.java(abstract、多态、super)
5.1 画出类的继承关系
5.2 main函数的代码实现什么功能?
将Person按照年龄升序排列。
5.3 如果将子类中的super构造函数去掉行不行?
不行,如果去掉会出现Implicit super constructor Person() is undefined. Must explicitly invoke another constructor
的错误,super也是用来继承父类各种方法和属性的。
5.4 PersonTest.java中哪里体现了多态?
Person
类、Student
类、 Manager
类、 Employee
类、Programmer
类的toString方法体现了多态性。
3.码云及PTA
3.1. 码云代码提交记录
在码云的项目中,依次选择“统计-Commits历史-设置时间段”, 然后搜索并截图
3.2 截图PTA题集完成情况图
3.3 统计本周完成的代码量
周次 | 总代码量 | 新增代码量 | 总文件数 | 新增文件数 |
---|---|---|---|---|
2 | 381 | 381 | 12 | 5 |
3 | 661 | 280 | 19 | 7 |
4 | 974 | 313 | 24 | 5 |
5 | 1358 | 384 | 33 | 9 |
6 | 1698 | 340 | 37 | 4 |