第4周作业-面向对象设计与继承

1. 本周学习总结

##1 尝试使用思维导图总结有关继承的知识点。
##2 使用常规方法总结其他上课内容。

1109836-20170318141111870-623229029.png

2. 书面作业

##1注释的应用
使用类的注释与方法的注释为前面编写的类与方法进行注释,并在Eclipse中查看。(截图)
1109836-20170318142637135-557666807.png
1109836-20170318142644838-182773030.png

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

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

最近手特别痒,想上天猫去买一件牛仔裤,我点进了360浏览器,进入了天猫商城,在搜索商品处搜索:“男青年潮流牛仔裤春夏”,然后我看中了一条裤子,进入商品详情,加入购物车。进入购物车界面选择数量1件,选择31码,点击结算,选择购买运费险,确认付款。

 ![](http://images2015.cnblogs.com/blog/1109836/201703/1109836-20170318145500588-1105462701.png)
 ![](http://images2015.cnblogs.com/blog/1109836/201703/1109836-20170318145520510-522136325.png)
 ![](http://images2015.cnblogs.com/blog/1109836/201703/1109836-20170318145532166-1998100958.png)

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

1109836-20170318145252666-920028471.png

3 尝试使用Java代码实现故事中描述的这一过程(不必很完善),将来要在这个基础上逐渐完善、扩展成一个完整的面向对象的系统。(可选:加分)

3ManagerTest.zip代码分析

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

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

class Manager extends Employee { /** * @param n the employee's name * @param s the salary * @param year the hire year * @param month the hire month * @param day the hire day */ public Manager(String n, double s, int year, int month, int day) { super(n, s, year, month, day); bonus = 0; }

Manager继承了Employee的函数构造方法,以及后面的getSalary(),继承了name,salary,hileday属性。

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

    在子类中访问父类getSalary()方法时,可以用super的方法
        

public double getSalary() { double baseSalary = super.getSalary(); return baseSalary + bonus; }

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

``` public class ManagerTest
{
public static void main(String[] args)
{
// construct a Manager object
Manager boss = new Manager("Carl Cracker", 80000, 1987, 12, 15);
boss.setBonus(5000);

  Employee[] staff = new Employee[3];

for (Employee e : staff)
System.out.println("name=" + e.getName() + ",salary=" + e.getSalary());
}
```

staff是Employee类型,所以你的e.getSalary是调用的Employee中的getSalary方法。

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

使用了代码复用可以简化代码,提高代码的运行效率,使用super直接调用可以避免冗长的代码。

4Object类

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

package bbt; public class Grade { public static void main(String[] args) { // TODO Auto-generated method stub System.out.println(new Fruit()); } } class Fruit{ private String name; }
运行时会显示:1109836-20170318152415854-1456228936.png
它调用的是object的toString函数。

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

父类中的toString并没有消失,只是其子类中的toString变化了而已。如若要复用弗雷德toString方法,需要加上super。

package bbt; public class Grade { public static void main(String[] args) { // TODO Auto-generated method stub System.out.println(new Fruit()); } } class Fruit{ private String name; public String toString() { return super.toString(); } }

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

public boolean equals(Object object){ if(this==object) return true; if(object==null) return false; if(name==null){ return false; } else if(!name.equalsIgnoreCase(this.name)) return false; return true; } }

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

public class LoL { public static void main(String[] args) { ArrayList<Fruit> fruitList=new ArrayList<Fruit>(); fruitList.add(new Fruit()); Fruit a=new Fruit(); if(!fruitList.contains(a)) fruitList.add(a); } }

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

1 画出类的继承关系

1109836-20170318161003370-521724159.png

###2 读懂main函数,将自己推测的出代码运行结果与真正运行结果进行比较。尝试分析原因
1109836-20170318161127745-1860325242.png

建立了一个抽象类person,用来被调用,然后Student、Employee、Manager和Programmer这四个类,都会先输出自己特有的成员变量:status、salary、bonus、allowance,然后调用继承父类的同名方法。又Manager和Programmer这两个类来继承了Employee类。

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

    子类里使用super构造函数,可以直接调用父类中的函数和属性以及方法,如果去掉了super构造函数,则无法调用父类的构造函数。

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

每个子类的toString方法体现了继承的多态性。

        for (Person person : peoples) {
            System.out.println(person);
        }

$多态的好处:
- 可替换性。多态对已存在的代码具有可替换性。
- 可扩充性。多态对代码具有可扩充性。增加新的子类不影响已存在类的多态性、继承性,以及其他特性的运行和操作。实际 上新加子类更容易获得多态功能。  
- 接口性。多态是超类通过方法签名,向子类提供了一个共同接口,由子类来完善或者覆盖它而实现的。  
- 灵活性。它在应用中体现了灵活多样的操作,提高了使用效率。  
- 简化性。多态简化了对应用软件的代码编写和修改过程,尤其在处理大量对象的运算和操作时,这个特点尤为突出和重要。值得注意的是,多态并不能够解决提高执行速度的问题,因为它基于动态装载和地址引用,或称动态绑定。

$多态和继承的关系:
继承即子类继承父类中所以的属性,方法和否早函数,实现代码的复用,多态是子类继承父类时拥有同一个方法名。
如果父类和子类中有相同的方法时,调用的会是子类中的方法,而不是父类的。
参考文件:PersonTest.java

3. 码云代码提交记录

在码云的项目中,依次选择“统计-Commits历史-设置时间段”, 然后搜索并截图
1109836-20170318162613901-491207185.png

4. PTA实验

题目集:jmu-Java-03-面向对象1-基础-封装继承 中的
函数(4-1, 4-2, 4-3,4-4较难选做)
编程(5-4, 5-5, 5-6)
一定要有实验总结
1.用了super方法来调用父类,可以减少代码的编写,简化程序。
2.在子类中调用父类的函数时要加super,这也可以区分开父类和子类中相同的函数。
3.在eclipse中有很多IDE工具,可以使编写代码时可以简单很多。
4.父类中的private变量和函数,在子类中时无法继承过来的。
5.虽然java的知识已经都弄懂了,但是要使用这些知识来编写函数还是要熟能生巧。

转载于:https://www.cnblogs.com/mz201521044152/p/6574720.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值