1. 本周学习总结

思维导图

常规:

(1)抽象类:不能被直接实例化。只能作为其它类的父类,这一点与final类正好相反。用关键词abstract声明。
(2)继承:只能有一个父类,即单继承,子类继承父类的全部成员(属性和方法), 并可能有自己特有的属性和方法。用extends声明。能够复用代码,去除冗余的代码,提高时效
(3)多态:以继承、重载等为基础,实现用相同的形态完成不同行为

2. 书面作业

Q1.注释的应用(使用类的注释与方法的注释为前面编写的类与方法进行注释,并在Eclipse中查看。(截图))







Q2.面向对象设计(大作业1,非常重要)

2.1将在网上商城购物或者在班级博客进行学习这一过程,描述成一个故事。(不得少于50字,参考QQ群中PPT的范例)

小d打开淘宝,在搜索栏里输入“java学习笔记”,跳出来的目录中商品琳琅满目,点击筛选,就商品类目、折扣和服务、价格区间等进行筛选,然后点开其中一个,内有对此书的详细介绍,并有配图。小d觉得不错,就将这本书加入了购物车,而后又搜索了其他的商品,并添加了几项到购物车中,最后,小d点开购物车,进行结算。后台,商家接单,发货。

2.2 通过这个故事我们能发现谁在用这个系统,系统中包含的类及其属性方法,类与类之间的关系。尝试找到这些类与属性,并使用思维导图描述类、属性、方法及类与类之间的关系

使用这个系统的有买家和卖家;
包含的类: 人 类、搜索类、商品类、购物车类,后台管理类等

Q3.ManagerTest.zip代码分析,回答几个问题:

3.1 在本例中哪里体现了使用继承实现代码复用?回答时要具体到哪个方法、哪个属性。

    super(n, s, year, month, day);
double baseSalary = super.getSalary();
第一行代码:使用了super关键字,调用了父类Employee中的构造函数
第二行代码:使用了super关键字,调用了父类中的getSalary()

3.2 Employee类及其子类Manager都有getSalary方法,那怎么区分这两个方法呢?

JVM根据调用该方法的实际对象的类型来决定选择调用哪个方法,即动态绑定。

子类中:

public double getSalary(){
double baseSalary = super.getSalary();
return baseSalary + bonus;
}
getSalary()中调用父类同名函数,用super关键字以示区别。

3.3 文件第26行e.getSalary(),到底是调用Manager类的getSalary方法还是Employee类的getSalary方法。

调用的是父类Employee的方法,因为   “Employee[] staff = new Employee[3]” staff定义的Employee类。(动态绑定)

3.4 Manager类的构造函数使用super调用父类的构造函数实现了代码复用,你觉得这样的有什么好处?为什么不把父类构造函数中的相关代码复制粘贴到Manager的构造函数中,这样看起来不是更直观吗?

好处当然是减少了代码量,代码复用就是为了要节省时间和资源,直接粘贴不是很冗余吗?当然,直接粘贴是很直观,但是如一个父类有n个子类,每个子类都用到父类相关代码,那就有点烦了

Q4.Object类

4.1 编写一个Fruit类及属性String name,如没有extends自任何类。使用 System.out.println(new Fruit());是调用Fruit的什么方法呢?该方法的代码是从哪 来的? 尝试分析这些代码实现了什么功能?

public class Fruit {
private String name;
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(new Fruit());
}
}
System.out.println(new Fruit()); 其调了toString()方法,该类中没有写此方法,也没有extends自任何类,但是在java中,Object类是所有类的父类,因此系统会默认执行Object中toString方法。

Object中toStrig代码如下

public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}

4.2 如果为Fruit类添加了toString()方法,那么使用System.out.println(new Fruit());调用了新增的toString方法。那么其父类中的toString方法的代码就没有了吗?如果同时想要复用其父类的toString方法,要怎么操作?(使用代码演示)

public String toString() {
return "Fruit [name=" + name + "] "+super.toString();
}
添加了toString方法后,父类中的方法并不改,要使用的话就用super关键字

4.3 Fruit类还继承了Object类的eqauls方法。尝试分析其功能?自己编写一个equals方法覆盖父类的相应方法,功能为当两个Fruit对象name相同时(忽略大小写),那么返回true。(使用代码证明你自己覆盖的eqauls方法是正确的)

public boolean equals(Object obj) {
return (this == obj);
}
父类中的equals方法是使用“==”,而“==”比较的是引用对象的地址,而不是对象值。
public class Fruit {
private String name;
public Fruit(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String toString() {
return "Fruit [name=" + name + "] "+super.toString();
}
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(new Fruit("daijianzhao"));
System.out.println((new Fruit("daijianzhao")).equals((new Fruit("djz"))));
System.out.println((new Fruit("djz")).equals((new Fruit("djz"))));
}
}

未自己添加equals方法时输出的结果为:

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.equals(other.name))
return false;
return true;
}

添加后的结果为:

4.4 在4.3的基础上使用ArrayList<"Fruit">fruitList存储多个fruit,要求如果fruitList中已有的fruit就不再添加,没有的就添加进去。请编写相关测试代码。并分析ArrayList的contatins方法是如何实现其功能的?

public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
ArrayList<Fruit> fruitList = new ArrayList<Fruit>();
for (String str = sc.nextLine(); !str.equals("end"); str = sc.nextLine())
{
Fruit f = new Fruit(str);
if (!fruitList.contains(f)) {
fruitList.add(f);
}
else System.out.println(str+" exist");
}
System.out.println(fruitList);
}

测试结果:

Q5.代码阅读:PersonTest.java(abstract、多态)

5.1 画出类的继承关系

5.2 读懂main函数,将自己推测的出代码运行结果与真正运行结果进行比较。尝试分析原因

推测:按年龄递增顺序排列persons数组(正解)
Person类是抽象类,不存在可实例化的对象,因此需要引用子类类型,由于子类都继承了父类的属性与方法,因此,people之间可以直接复用父类成员从而进行比较。

5.3 子类中里面使用了super构造函数,作用是什么?如果将子类中的super构造函数去掉,行不行?

作用是调用父类的构造器,对类成员初始化;
如果去掉,则系统会默认调用父类无参构造函数,假如父类中没有此类函数,则会编译出错。本例就是无无参构造函数的

5.4 PersonTest.java中的代码哪里体现了多态?你觉得多态有什么好处?多态和继承有什么关系吗?

多态就是“相同的形态,不同的行为”,
System.out.println(person);
如此简单的一句,却能实现不同类对象的输出(Employee、Student、Programmer、Manager)
好处不言而喻,如果没有多态性,那么我们的代码会是这样的:
System.out.println(Employee);
System.out.println(Student);
System.out.println(Programmer);
System.out.println(Manager);
并且如果还有新的类型,新的对象,那么,我们的工作量就又加大不少,从时间效率上来看也不理想。
关系:继承是多态的基础

3.码云提交记录

PTA实验总结

(1)在子类中,可以自己编写方法,若与父类同名则在调用时,会调用子类的方法,从而覆盖掉父类的方法,例:equals、toString方法
(2)ArrayList,动态创建数组,数组元素数据类型可以是基本的也可以是抽象的
(3)abstract 声明的类为抽象类,无法实例化,因此必须被继承
(4)使用super关键字调用父类构造器时,应将其放在子类构造函数中的第一行
(5)......

201521123023《java程序设计》第四周学习总结的更多相关文章

  1. Java程序设计第四周学习总结

    1. 本周学习总结 1.1 尝试使用思维导图总结有关继承的知识点. 1.2 使用常规方法总结其他上课内容. 答:①String类是final类,不能定义String的子类. ② instanceof ...

  2. 杨其菊201771010134《面向对象程序设计(java)》第四周学习总结

    <面向对象程序设计(java)> 第四周学习总结 第一部分:理论知识 1.类与对象 a.类(class)是构造对象的模板或蓝图.由类构造对象的过程称为创建类的实例: java中类声明的格式 ...

  3. 对于“2017面向对象程序设计(JAVA)第四周学习总结”存在问题的反馈

    对于“2017面向对象程序设计(JAVA)第四周学习总结”存在问题的反馈 “这部分同学博文总结没有写,实验作业没有提交.”——1.关于博文作业.实验作业教学功能的正解:学习知识.暴露问题.衔接课上.2 ...

  4. 201871010106-丁宣元 《面向对象程序设计(java)》第四周学习总结

    201871010106-丁宣元 <面向对象程序设计(java)>第四周学习总结 正文开头 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-da ...

  5. 20155318 2016-2017-2 《Java程序设计》第九学习总结

    20155318 2016-2017-2 <Java程序设计>第九学习总结 教材学习内容总结 学习目标 了解JDBC架构 掌握JDBC架构 掌握反射与ClassLoader 了解自定义泛型 ...

  6. 《Java程序设计》第二学习总结

    <Java程序设计>第二学习总结 教材学习内容总结 类型 byte(字节) shot(短整型) int(整型) long(长整型) float(浮点型) double(双精度) char( ...

  7. 20145304 刘钦令 Java程序设计第二周学习总结

    20145304 <Java程序设计>第2周学习总结 教材学习内容总结 java可区分基本类型和类类型(即参考类型)两大类型系统. 基本类型主要可区分为整数.字节.浮点数.字符与布尔. 整 ...

  8. 20145304 刘钦令 Java程序设计第一周学习总结

    20145304<Java程序设计>第1周学习总结 教材学习内容总结 1995年5月23日,是公认的Java的诞生日,Java正式由Oak改名为Java. Java的三大平台是:Java ...

  9. 20145120黄玄曦 《java程序设计》 寒假学习总结

    1和2.我对未来规划不多,我认为好好学习积累知识能帮助我应对未来的挑战,这是我的学习动力之一,此外,了解新知识满足好奇心也是我的主要的学习动力. 3.我认为专业课学习比公务员考试重要,我认为专业知识是 ...

  10. 201621123007 Java程序设计第一周 学习总结

    第一周-Java基本概念 201621123007 <Java程序设计> 第一周学习总结 1. 本周学习总结 java是面向对象的一类语言,三大特征:封装性,继承性,多态性. jdk jr ...

随机推荐

  1. win7建立FTP服务器

    1.在控制面板->程序和功能->打开或关闭windows功能->安装IIS服务 2.控制面板->管理工具->IIS管理器 浏览器地址栏:ftp://zc:1234@192 ...

  2. PHP基础与JS操作的区别

    嵌入页面方式 JS嵌入方式:<script></script> PHP嵌入方式:<?php ?>(常用) 输出语法 Javascript输出 1.alert(&qu ...

  3. 理解javascript中的回调函数(callback)

    以下内容来源于:http://www.jb51.net/article/54641.htm 最近在看 express,满眼看去,到处是以函数作为参数的回调函数的使用.如果这个概念理解不了,nodejs ...

  4. iOS 主题/皮肤之 SakuraKit

    前言 目前市场上很多 App 都有主题变更.皮肤切换的功能.随着项目代码量的不断增长,业务不断完善,功能性代码逐渐趋于模块化,尤其是在多人协作开发同一个项目时,模块解耦尤为重要,同时,公共基础库的功能 ...

  5. Python初学——多进程Multiprocessing

    1.1 什么是 Multiprocessing 多线程在同一时间只能处理一个任务. 可把任务平均分配给每个核,而每个核具有自己的运算空间. 1.2 添加进程 Process 与线程类似,如下所示,但是 ...

  6. 问题: 数据流中位数 求解 时间复杂度度 java

    今天练习了一题: 数据流中位数 问题描述:数字是不断进入数组的,在每次添加一个新的数进入数组的同时返回当前新数组的中位数. 案例: 持续进入数组的数的列表为:[1, 2, 3, 4, 5],则返回[1 ...

  7. spring基于注解进行注入(个人记录)

    spring的Bean基于注解进行配置,再结合自动装配属性,也就DI,其实说白了就相当于初始化的时候给对象赋初值. 配置文件的过程有些麻烦,记录一下. 基于注解进行配置: 1.在application ...

  8. [2014-08-24]为 Xamarin Studio 创建的 Asp.Net Mvc 项目配置 gitignore

    今天在尝试 Mac 下使用 Xamarin Studio (以下简称XS) 开发 Asp.Net Mvc 项目,发现XS没启用版本控制,故自己去命令行下使用 git init,想到需要一个.gitig ...

  9. instanceof 是如何工作的

    知其然 JavaScript 提供 instanceof 关键字判断一个对象所属的构造函数.在 js 高级编程中讲到 instanceof 的作用: instanceof 操作符,用来测试实例与原型链 ...

  10. [WPF] UserControl vs CustomControl

    介绍 WPF中有两种控件:UserControl和CustomControl,但是这两者有什么区别呢?这篇博客中将介绍两者之间的区别,这样可以在项目中合理的使用它们. UserControl 将多个W ...