201521123057 《Java程序设计》第4周学习总结
1. 本周学习总结
1.1 尝试使用思维导图总结有关继承的知识点。
2. 书面作业
注释的应用
使用类的注释与方法的注释为前面编写的类与方法进行注释,并在Eclipse中查看。(截图)
答:
面向对象设计(大作业1,非常重要)
2.1 将在网上商城购物或者在班级博客进行学习这一过程,描述成一个故事。(不得少于50字,参考QQ群中PPT的范例)
答:
1.我的钥匙扣和钥匙一起丢了,我想要一个新的钥匙扣(/TДT)/
2.我来到了某网上购物网站并注册登录
3.在网站的搜索框内,我键入“舰娘钥匙扣”几个字符
4.很快,想要的商品出现在我的眼前。我点击“包邮”对商品进行筛选
5.再继续点击“按销量排行”对商品进行排序
6.看!这款■第六驱逐队 晓响雷电 亚克力钥匙扣挂饰 ■多可爱!就是它了(o)/ 先让我把它加入购物车(〜 ̄△ ̄)〜
7.来到购物车,点击结算
8.继续前进到付款界面,选择支付方式为支付宝,付款成功!
9.我的钥匙扣已经在路上啦!(ノ≧∇≦)ノ
2.2 通过这个故事我们能发现谁在用这个系统,系统中包含的类及其属性方法,类与类之间的关系。尝试找到这些类与属性,并使用思维导图描述类、属性、方法及类与类之间的关系。
答:
package shopping;
class Login {// 账户类
String userName;
String password;
void QRCode()
{
// 二维码登录
}
}
class Search {// 搜索类
private String keyWord;
void search() {
}
}
class freePost extends Goods{//判断是否包邮
boolean isFreePost(){
}
}
class sortFromSalesVolume extends Goods{//按销量排序
sortFromSalesVolume(){
}
}
class Goods {// 商品类
private String name;
private String price;
private boolean freePost;// 是否包邮
private int salesVolume;//销量
}
class ShoppingCart {// 购物车类
private double totalPrice;
public void add() {
}
public void delete() {
}
public void pay() {
}
}
class Menu {// 菜单类
public void Login(Login user) {
}
public void Search() {
Search search = new Search();
}
public void ShoppingCart(ShoppingCart shoppingCart) {
}
}
class ShoppingSystem {// 购物平台
public static void main(String[] args) {
}
}
思维导图如下:
ManagerTest.zip代码分析
分析ManagerTest.zip中的代码,回答几个问题:
3.1 在本例中哪里体现了使用继承实现代码复用?回答时要具体到哪个方法、哪个属性。
答:
//Employee类为父类
public Employee(String n, double s, int year, int month, int day)
{
name = n;
salary = s;
GregorianCalendar calendar = new GregorianCalendar(year, month - 1, day);
hireDay = calendar.getTime();
}
public double getSalary()
{
return salary;
}
//Manager类为子类
public Manager(String n, double s, int year, int month, int day)//复用父类中的各项属性
{
super(n, s, year, month, day);//复用父类的Employee()方法
bonus = 0;
}
public double getSalary()//复用父类的getSalary()方法
{
double baseSalary = super.getSalary();
return baseSalary + bonus;
}
3.2 Employee类及其子类Manager都有getSalary方法,那怎么区分这两个方法呢?
答:Employee为父类,Manager为子类,Java中关键字super可以表示父类,故而是区分两个方法的绝佳手段
3.3 文件第26行e.getSalary(),到底是调用Manager类的getSalary方法还是Employee类的getSalary方法。
答:main函数中定义e的类型为Employee,就近原则使用Employee类的getSalary方法
3.4 Manager类的构造函数使用super调用父类的构造函数实现了代码复用,你觉得这样的有什么好处?为什么不把父类构造函数中的相关代码复制粘贴到Manager的构造函数中,这样看起来不是更直观吗?
答:super的好处就是避免了代码的冗余,节省时间和资源。计算机不是人类,不需要“直观”
Object类
4.1 编写一个Fruit类及属性String name,如没有extends自任何类。使用System.out.println(new Fruit());是调用Fruit的什么方法呢?该方法的代码是从哪来的?尝试分析这些代码实现了什么功能?
答:
调用Fruit的toString()的方法;因为toString()是Object里面已经有了的方法,而所有类都是继承Object,所以“所有对象都有这个方法”。
在Object.class中找到如下代码:
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
可以知道它将输出类的名称以及一个"@"符号,并以Integer类型输出此对象哈希码的无符号十六进制,所有这一切将以字符串的形式返回
4.2 如果为Fruit类添加了toString()方法,那么使用System.out.println(new Fruit());调用了新增的toString方法。那么其父类中的toString方法的代码就没有了吗?如果同时想要复用其父类的toString方法,要怎么操作?(使用代码演示)
答:
直接使用eclipse中的自动生成功能完成toString()方法:
找到Object.class文件,可以发现父类(Object)中的toString方法的代码依旧存在
4.3 Fruit类还继承了Object类的eqauls方法。尝试分析其功能?自己编写一个equals方法覆盖父类的相应方法,功能为当两个Fruit对象name相同时(忽略大小写),那么返回true。(使用代码证明你自己覆盖的eqauls方法是正确的)
答:在eclipse自动生成功能完成hashCode()与equals()方法
public class Main {
public static void main(String[] args) {
Fruit a=new Fruit("Kantai Collection");
Fruit b=new Fruit("KANTAI COLLECTION");
Fruit c=new Fruit("World of Warships");
System.out.println(a.equals(b));
System.out.println(a.equals(c));
}
}
class Fruit{
String name;
public Fruit(String name){
this.name=name;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((name == null) ? 0 : name.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Fruit other = (Fruit) obj;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equalsIgnoreCase(other.name))
return false;
return true;
}
}
运行结果:
代码阅读:PersonTest.java(abstract、多态)
5.1 画出类的继承关系
答:
5.2 读懂main函数,将自己推测的出代码运行结果与真正运行结果进行比较。尝试分析原因
答:运行结果:
原因分析:main函数中Person数组中每个对象以各自所定义的类中的(字符串)toString的形式输出。同时程序对数组中的元素依据年龄进行了排序(由低到高),再使用for (Person person : peoples)
将数组元素逐个输出
5.3 子类中里面使用了super构造函数,作用是什么?如果将子类中的super构造函数去掉,行不行?
答:super构造函数的作用是:调用父类的构造函数;
不可以去掉super构造函数,如果去掉super,Java默认调用一个父类的无参数的构造函数,而父类中的构造函数都需要参数,编译将无法通过
5.4 PersonTest.java中的代码哪里体现了多态?你觉得多态有什么好处?多态和继承有什么关系吗?
答:多态是指:使用单一接口操作多种类型的对象;书p188
代码哪里体现了多态:main函数中对peoples数组的相关操作中,既可以使用Person类型操作Student对象,也能使用Person类型操作Employee对象
多态的好处:使用继承关系屏蔽子类对象之间的差异性,可以根据不同需求编写不同的方法调用相应子类满足需求,提高了程序的通用性
多态与继承:
1.继承,子类继承父类中所以的属性和方法,但是对于private的属性和方法,子类虽然是继承了,但是需要父类提供特定的方法进行访问,否则相当于没有继承到
2.多态:需要有父类子类的继承关系,才能实现使用单一接口操作多种类型的对象;有了封装,继承才能有多态
3. 码云代码提交记录
在码云的项目中,依次选择“统计-Commits历史-设置时间段”, 然后搜索并截图
4. PTA实验
题目集:jmu-Java-03-面向对象1-基础-封装继承 中的
函数(4-1, 4-2, 4-3,4-4较难选做)
编程(5-4, 5-5, 5-6)
实验总结
4-1:注意使用关键字extends便可轻易解决,十分简单
4-2:使用if...else条件嵌套,使用Java自带的equals方法依据输入的字符与应该采取的措施-
4-3:本题要求覆盖Employee类的equals方法,并判断两个Employee对象是否相等(注意均为null的情况);之后还要比较company与salary属性,其中salary是double型,使用DecimalFormat df = new DecimalFormat("#.##");
5-4:定义一个抽象(abstract)的Shape类,让Rectangle与Circle继承它,然后再在主类中添加上题目中需要的相应方法。
5-5:对覆盖的使用提出更高要求,同时也要更加熟练数组的操作
201521123057 《Java程序设计》第4周学习总结的更多相关文章
- 20145213《Java程序设计》第九周学习总结
20145213<Java程序设计>第九周学习总结 教材学习总结 "五一"假期过得太快,就像龙卷风.没有一点点防备,就与Java博客撞个满怀.在这个普天同庆的节日里,根 ...
- 20145213《Java程序设计》第二周学习总结
20145213<Java程序设计>第二周学习总结 教材学习内容总结 本周娄老师给的任务是学习教材的第三章--基础语法.其实我觉得还蛮轻松的,因为在翻开厚重的书本,一股熟悉的气息扑面而来, ...
- 20145213《Java程序设计》第一周学习总结
20145213<Java程序设计>第一周学习总结 教材学习内容总结 期待了一个寒假,终于见识到了神秘的娄老师和他的Java课.虽说算不上金风玉露一相逢,没有胜却人间无数也是情理之中,但娄 ...
- 21045308刘昊阳 《Java程序设计》第九周学习总结
21045308刘昊阳 <Java程序设计>第九周学习总结 教材学习内容总结 第16章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 数据库本身是个独立运行的应用程序 撰 ...
- 20145330孙文馨 《Java程序设计》第一周学习总结
20145330孙文馨 <Java程序设计>第一周学习总结 教材学习内容总结 刚开始拿到这么厚一本书说没有压力是不可能的,开始从头看觉得很陌生进入不了状态,就稍微会有一点焦虑的感觉.于是就 ...
- 20145337 《Java程序设计》第九周学习总结
20145337 <Java程序设计>第九周学习总结 教材学习内容总结 数据库本身是个独立运行的应用程序 撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的增删查找 JDBC可以 ...
- 20145337 《Java程序设计》第二周学习总结
20145337 <Java程序设计>第二周学习总结 教材学习内容总结 Java可分基本类型与类类型: 基本类型分整数(short.int.long).字节(byte).浮点数(float ...
- 20145218《Java程序设计》第一周学习总结
20145218 <Java程序设计>第一周学习总结 教材学习内容总结 今天下午看了Java学习的视频,感觉很是新奇,之前觉得Java学起来是艰难枯燥的,但通过第一章的学习觉得如果自己可以 ...
- 《Java程序设计》第九周学习总结
20145224 <Java程序设计>第九周学习总结 第十六章 整合数据库 JDBC入门 ·数据库本身是个独立运行的应用程序 ·撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的 ...
- 《Java程序设计》第二周学习总结
20145224陈颢文<Java程序设计>第二周学习总结 教材学习内容总结 一.类型.变量与运算符 1.类型 整数: 可细分为为short整数(占2字节),int整数(占4字节),long ...
随机推荐
- 使用ExpressionVisitor进行lambadaExpression的动态拼接
现有如下实体 public class User { public int Id { get; set; } public string Name { get; set; } } 根据这个实体创建一个 ...
- POSTMAN-REST Client
下载方式:翻.墙安装 #使用的时候不用翻.墙 下载地址:https://chrome.google.com/webstore/search/postman%20rest%20client Po ...
- 【LeetCode】数组-2(628)-数组中三个数相乘最大
题目不难: 思路一(排序取两端) 先排序,最后三个数相乘即可.(很快就想到了,但是没想全面 [
- asp.net 开发 sql server 转 oracle
前段时间我们公司项目 要把sql server 转oracle 分享一下心得 也记录一下问题 开始我研究了一段时间 然后下载了 oracle 11g 版本 和 PL/SQL(客户端) 和sql ser ...
- C++动态内存管理之深入探究new和delete
C++中程序存储空间除栈空间和静态区外,每个程序还拥有一个内存池,这部分内存被称为自由空间(free store)或堆(heap).程序用堆来存储动态分配的对象,即,那些程序运行时分配的对象.动态对象 ...
- Mysql中较为复杂的分组统计去重复值
这是我的代码: 前提是做了一个view:att_sumbase 首先分开统计每天的中午.下午饭点人数,这时需要分别去除中午和下午重复打卡的人.用了记录集的交,嵌套select的知识. 注意不能直接使用 ...
- Hibernate——hibernate的配置测试
Hibernate Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自 ...
- spring学习笔记2---MVC处理器映射(handlerMapping)三种方式(附源码)
一.根据Beanname访问controller: 在springmmvc-servlet.xml的配置handlermapping中加入beanname,通过该beanname找到对应的contro ...
- React渲染问题研究以及Immutable的应用
写在前面 这里主要介绍自己在React开发中的一些总结,关于react的渲染问题的一点研究. 另外本人一直希望在React项目中尝试使用,因此在之前已经介绍过immutable的API,可以参看这里I ...
- The C++ Programming Language 学习笔记 第7章 函数
1.关于内联函数(inline) 借用一下书中的例子. inline int fac(int n) { ) ? :n*fac(n-); } inline描述符给编译器一个提示,要求 ...