1. 本周学习总结

1.1 写出你认为本周学习中比较重要的知识点关键词

is a关系 覆盖 Object 超级父类 继承 抽象类 多态 重载 static super private public protected default instanceof abstract

1.2 尝试使用思维导图将这些关键词组织起来。注:思维导图一般不需要出现过多的字。

1.3 可选:使用常规方法总结其他上课内容。

在写形状与继承时我一直被eclipse中的输入问题困住,所以在这里加以总结(假定新建了一个Scanner类的对象sc)

先来看看JDK文档中关于这三个方法的定义:

sc.next()表示查找并返回来自此扫描器的下一个完整标记

sc.nextInt将输入信息的下一个标记扫描为一个 int

sc.nextline()表示此扫描器执行当前行,并返回跳过的输入信息。 此方法返回当前行的其余部分,不包括结尾处的行分隔符。当前位置移至下一行的行首。

sc.next()和sc.nextInt()都是阻塞式的,在遇到空格,Tab,Enter,会继续等待,直到获得相应类型相应的值,而sc.nextline()则是读取包括回车在内的当前行

详细讲解及具体例子请看这篇文章,写的hin好啊!

因此在写代码是最好注意上述三个不要混用,很容易出现错误,最好就是只用一种读取输入的方法比如sc.nextline(),如果要读取一个整数可以再使用Integer.paeseInt转换一下,这样虽然麻烦但是却是不容易出错,如果真的要混用,就要注意实时“吃”掉空格或换行符

2. 书面作业

1. 面向对象设计(大作业1-该作业将作为以后其他作业的基础,请务必完成)

1.1 讲故事:用50字以上讲一个你在网上商城购物或者在班级博客进行学习的故事。使用Markdown的加粗标记把关键名词标注出来,使用语句块标记把里面关键的动词标注出来。

结对对象:靳天婷

今天,我打开淘宝网页,想买一些零食书籍,我直接搜索零食类,出现坚果薯片面包等分类,我每类都点击进去,看了看自己中意的东西,添加购物车,之后我还想买些书来充实自己,于是我又搜索书籍类,出现儿童书教科书课外书等分类,选购了一些再次添加购物车,之后再购物车中结算价格

1.2 找出系统中包含的类及其属性、方法,类与类之间的关系,并绘制相应类图。注意:不一定非要体现继承关系。只要能将系统描述完整即可。一开始设计的时候不要考虑太多,不要出现太多的类,仅出现必要的类,完成最小功能即可。对商城购物系统建议只做购物车模块。

1.3 使用Java代码实现这个系统(不必很完善)。粘贴运行截图与关键代码。将来要在这个基础上逐渐完善、扩展成一个完整的面向对象的系统。合作完成:2-3人一个小组。

abstract class Goods{   //商品类
protected Books book;
private Snakes snake;
}
class Books{   //书籍类
protected double price;
private String name;
protected int amount;
public Books(double price, String name) {
this.price = price;
this.name = name;
}
public Boolean Add(int amount) { //添加到购物车
return true;
}
public Boolean Collect(String name) { //收藏起来
return true;
}
public double sum(Books []books) { //计算书籍的总价
double sum=0.0;
for(int i=0;i<books.length;i++)
sum+=books[i].price*books[i].amount;
return sum;
}
}
class ChildrenBook extends Books{ //儿童书类继承自书籍类
public ChildrenBook(double price, String name) {
super(price,name);
}
}
class TextBook extends Books{ //教科书类继承自书籍类
public TextBook(double price, String name) {
super(price,name);
}
}
class OutsideReading extends Books{ //课外读物类继承自书籍类
public OutsideReading(double price, String name) {
super(price,name);
}
}
class Snakes{   //零食类
private double price;
private String name;
protected int amount;
public Snakes(double price, String name) {
this.price = price;
this.name = name;
} public Boolean Add(int amount) { //添加到购物车
return true;
} public Boolean Collect(String name) { //收藏起来
return true;
}
public double sum(Snakes []snakes) { //计算零食的总价
double sum=0.0;
for(int i=0;i<snakes.length;i++)
sum+=snakes[i].price*snakes[i].amount;
return sum;
}
}
class Nut extends Snakes{ //坚果类继承自零食类
public Nut(double price, String name) {
super(price,name);
}
}
class Chips extends Snakes{ //薯片类继承自零食类
public Chips(double price, String name) {
super(price,name);
}
}
class Bread extends Snakes{ //面包类继承自零食类
public Bread(double price, String name) {
super(price,name);
}
}
class shoppingcart{    //购物车类
private double sum=0;
private Books books;
private Snakes snakes; public double AllSum(Goods []goods) { //计算购物车中所有商品的总价
double sum=0.0;
for(int i=0;i<goods.length;i++)
sum+=goods[i].sum();
return sum;
} public boolean Delete(ArrayList<Goods> goods) { //删除购物车中的物品
return true;
}
}

2. ManagerTest.zip代码分析(继承、多态)

2.1 简述文件中表现出的继承关系。哪些是共有方法,哪些是子类特有的属性和方法?

Manager类继承自Employee类,主要判断标准是出现了extends关键字

共有方法:

  • Manager中调用Employee的构造方法
  • Manager中调用了Employee的getSalary()方法

Manager中特有的方法和属性:

  • bonus属性
  • public Manager(String n, double s, int year, int month, int day)的构造方法
  • getSalary()方法
  • setBonus()方法

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

  • 到底调用了Manager还是Employee的getSalary()方法要在编译运行的时候回根据e的类型来决定,这就是所谓的后期绑定。
  • staff[0]调用的是Manager类的getSalary()方法,staff[1]和staff[2]调用的是Employee类的getSalary方法,所以e先后分别调用了Manager,Employee,Employee的getSalary()方法

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

最大的好处是提高编程效率,避免了出现代码冗余,比较方便美观

3. Object类中的toString与equals

3.1 编写Fruit类,属性String name。如果覆盖其toString()方法,其父类中的toString方法的代码就没有了吗?编写Fruit的toString()方法,在该方法中要将调用父类的toString方法得到的字符串与自己特有的属性name拼接起来,怎么编写?(使用代码展示)

如果覆盖其toString()方法,其父类中的toString方法的代码还存在,覆盖但不消失

代码及运行结果:

3.2 为Fruit类编写equals方法覆盖父类相应方法,功能为当两个Fruit对象name相同时(忽略大小写),返回true。(使用代码证明你自己覆盖的equals方法是正确的)

代码及运行结果:

3.3 完成3.2后,使用ArrayList<Fruit> fruitList存储多个fruit,添加时要求如果要添加的fruit对象在fruitList中已存在就不添加,不存在就添加。编写相关测试代码。并分析ArrayList的contains代码与equals方法有何关系?

编写的代码:

class Fruit{
private String name;
public Fruit(String name) {
super();
this.name = name;
}
public String toString() {
return "Fruit [name=" + name + "]";
}
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;
} }
public class Main7 {
public static void main(String[] args) {
ArrayList<Fruit> list=new ArrayList<Fruit>();
Scanner sc=new Scanner(System.in);
while(sc.hasNext()){
String s=sc.nextLine();
if(s.equals("end"))
break;
Fruit fruit=new Fruit(s);
if(!list.contains(fruit)){
list.add(fruit);
}
}
System.out.println(list);
}
}

运行结果

ArrayList的contains代码与equals方法的关系:

contains方法的源代码

public boolean contains(Object o) {
return indexOf(o) >= 0;
}
public int indexOf(Object o) {
if (o == null) {
for (int i = 0; i < size; i++)
if (elementData[i]==null)
return i;
} else {
for (int i = 0; i < size; i++)
if (o.equals(elementData[i]))
return i;
}
return -1;
}
public int lastIndexOf(Object o) {
if (o == null) {
for (int i = size-1; i >= 0; i--)
if (elementData[i]==null)
return i;
} else {
for (int i = size-1; i >= 0; i--)
if (o.equals(elementData[i]))
return i;
}
return -1;
}

由上图可以看出ArrayList的contains()方法会调用对应元素类型的equals()方法进行判断该元素是否已经在ArrayList中

4. 实验总结

4.1 PTA编程题(形状-继承)。并回答:在本题中使用多态为编程带来了什么好处。

多态编程的好处:

  • 减少编码的工作量,增强程序的可扩展性及可维护性,使代码更加简洁。
  • 一个接口,多种实现
  • 动态绑定(后期绑定),根据具体创建的对象来决定调用哪种类中的方法

4.2 PTA编程题(覆盖)。并回答:编写eqauls方法是需要注意些什么?

这一题其实思路很简单,只要跟着题目的要求一步一步来就可以实现,在编写equals方法是我用了两种方法,一个是用eclipse自动生成的equals方法,一个是看了Object类的equals方法然后照葫芦画瓢写出来的,这两种方法好像都可以,但是在主函数中调用第二种方法编写的equals方法时注意要toString一下再比较,而在主函数中调用第一种方法编写的equals方法时既可直接比较也可toString一下再比较

4.3 程序填空、函数题(1-3)

  • 程序填空题:按照题目要求来就没什么问题
  • 函数题1:主要就是用super调用父类
  • 函数题2:注意next(),nextline(),nextInt()读取时的规则,判断是否为null时要用equals方法
  • 函数题3:本题主要涉及的是java中重写equals方法。先用eclipse中自动生成的equals方法,然后再根据题目要求做适当修改和调整,比如用DecimalFormat df = new DecimalFormat("#.##");来保留两位小数再比较等,不是很难

3. 码云及PTA

3.1. 码云代码提交记录



2截图PTA题集完成情况图







3统计本周完成的代码量

周次 总代码量 新增代码量 总文件数 新增文件数
2 343 343 10 10
3 498 498 8 8
5 788 788 26 26

Week04-面向对象设计与继承的更多相关文章

  1. EffectiveC++ 第6章 继承与面向对象设计

    我根据自己的理解,对原文的精华部分进行了提炼,并在一些难以理解的地方加上了自己的"可能比较准确"的「翻译」. Chapter 6 继承与面向对象设计 Inheritance and ...

  2. js面向对象设计之class继承

    EcmaScript 2015 (又称ES6)通过一些新的关键字,使类成为了JS中一个新的一等公民.但是目前为止,这些关于类的新关键字仅仅是建立在旧的原型系统上的语法糖,所以它们并没有带来任何的新特性 ...

  3. Effective C++(20) 继承与面向对象设计

    本文主要参考<Effective C++ 3rd>中的第六章部分章节的内容. 关注的问题集中在继承.派生.virtual函数等.如: virtual? non-virtual? pure ...

  4. Effective C++ ——继承与面向对象设计

    条款32:确定你的public继承塑模出is-a关系 以public继承的类,其父类的所有的性质都应该使用与子类,任何需要父类的地方都应该能用子类来代替,任何子类类型的对象也同时是父类的: class ...

  5. Java程序员应该了解的10个面向对象设计原则

    面向对象设计原则: 是OOPS(Object-Oriented Programming System,面向对象的程序设计系统)编程的核心,但大多数Java程序员追逐像Singleton.Decorat ...

  6. UML类图与面向对象设计原则

    1. 引言     从大一开始学习编程,到如今也已经有两年了.从最初学习的Html,Js,JaveSe,再到JavaEE,Android,自己也能写一些玩具.学习过程中也无意识的了解了一些所谓的设计模 ...

  7. 面向对象设计之SRP(单一职责)原则

    SRP设计原则面向对象类设计的第一个原则,最优先考虑的因素 一个类应该有且仅有一个职责.所谓一个类的职责是指引起该类变化的原因,如果一个类具有一个以上的职责,那么就会有多个不同的原因 引起该类变化,其 ...

  8. day24:面向对象设计与面向对象编程、类和对象

    一.三大编程范式: 面向过程: 面向函数: 面向对象: 二.程序的进化论: 1.编程最开始就是无组织无结构,从简单控制流中按步写指令 2.从上述的指令中提取重复的代码块或逻辑,组织到一起(比方说,你定 ...

  9. 6. javacript高级程序设计-面向对象设计

    1. 面向对象设计 1.1 理解对象 1.1.1 属性类型 (1). 数据属性:相当于对象的字段,包含一个数据值的位置,在这个位置可以读取和写入值.数据属性中有4个描述其行为的特性: l [[Conf ...

  10. 【OOAD】面向对象设计原则概述

    软件的可维护性和可复用性 知名软件大师Robert C.Martin认为一个可维护性(Maintainability) 较低的软件设计,通常由于如下4个原因造成: 过于僵硬(Rigidity)  ...

随机推荐

  1. POI 的API大全二

    1.POI结构与常用类 (1)POI介绍 Apache POI是Apache软件基金会的开源项目,POI提供API给Java程序对Microsoft Office格式档案读和写的功能. .NET的开发 ...

  2. GridView中添加行单击事件.md

    [toc] 1.使用说明 1.方法来源 该方法主要参考StackOverflow上面的答案和下面这篇文章 http://www.codeproject.com/Articles/15677/Click ...

  3. 【BZOJ2330】【SDOI2012】糖果(差分约束,SPFA)

    [BZOJ2330][SDOI2012]糖果 题面 题目描述 幼儿园里有N个小朋友,lxhgww老师现在想要给这些小朋友们分配糖果,要求每个小朋友都要分到糖果.但是小朋友们也有嫉妒心,总是会提出一些要 ...

  4. C# 登录 存Session ,cookie并且验证只能一个人登录以及清session并且Cache

    string id = ConvertHelper.GetString(ds.Tables[0].Rows[0]["Uid"]);//用户ID string struserid = ...

  5. Scala编程快速入门系列(二)

    目    录 一.Scala概述 二.Scala数据类型 三.Scala函数 四.Scala集合 五.Scala伴生对象 六.Scala trait 七.Actor 八.隐式转换与隐式参数 九.Sca ...

  6. 进入TP-Link路由器之后利用快捷键F12查看星号路由密码的方法

    今天又破解了几个路由器,这两张图片是大多数路由器如TP-LINK路由器查看拨号圆点密码的方法.

  7. Unity3D 打包Standalone(exe文件) Shader丢失

    Shader丢失算是老生常谈了 从刚开始接触Unity时,从别的地方拿过来模型导入 就认识了一个标志性的颜色 就是粉色,或者是紫色 当在Unity中遇到这种颜色 不用怀疑 绝对是Shader或者材质丢 ...

  8. js操作DOM元素

    创建 document.createElement() 查找 document.getElementById()   返回对拥有指定 id 的第一个对象的引用. document.getElement ...

  9. 关于 promise 吃到错误的理解

    关于 promise 吃到错误的理解 下面的内容需要对浏览器原生支持的 promise 的基本用法有了解,如果你还不知道 promise 和 promise 的 catch 方法,你可能需要先在 这里 ...

  10. css实现div中图片高度自适应并与父级div宽度一致

    需求:1.父级div不设置高度 2.图片高度自适应,并且显示为正方形: 以前遇到列表中图片高度必须和父级宽度相同,并且需要为正方形的时候,最开始的方法是定死图片高度,这样会导致不同分辨率下图片会压缩, ...