1. 本周学习总结

1.1 尝试使用思维导图总结有关多态与接口的知识点。

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

  答:接口:1、所有的默认方法都是public abstract;
2、属性都是public static final;
3、接口与继承的差别:接口是has-a关系,而继承是is-a关系
4、接口不是类,不能使用new进行实例化,但是可以使用Comparable x = new Employee(···);
比较:实现Comparable使用Arrays.sort[s]
面向接口编程:代码与接口相关联的,不需要考虑具体的实现类

2. 书面作业

1. 代码阅读:Child压缩包内源代码

  • 1.1 com.parent包中Child.java文件能否编译通过?哪句会出现错误?试改正该错误。并分析输出结果。##

          package com.parent;
    public class Child extends Parent{
    public static void main(String[] args){
    Parent p = new Parent();
    Child c = new Child();
    c.getParenti();
    c.getParentj();
    Other.showParentj(p);
    }
    public void getParenti(){
    System.out.println(i);
    }
    public void getParentj(){
    System.out.println(super.j);
    System.out.println(j);
    System.out.println(geti());
    System.out.println(super.geti());
    }
    } 答:编译不能通过,出错如下:



      将Parent中的```private int i=1```改成```protected int i=1```即可编译通过,private是私有的,其他不能调用它。
编译结果如下:

  • 1.2 另外一个包中的OutOfParentPackage.java,能否编译通过?提示什么错误?分析原因。如何更改才能使之正常编译?

        public class OutOfParentPackage{
    public static void showParentj(Parent p){
    System.out.println(p.j);
    System.out.println(p.geti());
    p.getj();
    }
    } 答:错误如图:将parent中的protected定义改为public。

2. abstract进阶:阅读GuessGame抽象类的设计与使用源代码

  • 2.1 Guess改造前代码很简单,而改造后的代码使用了抽象类、抽象方法看起来很复杂,那这样的改造到底有什么好处呢?

        //改造前
    package cc.openhome;
    import java.util.Scanner;
    public class Guess {
    public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    int number = (int) (Math.random() * 10);
    int guess;
    do {
    System.out.print("猜数字(0 ~ 9):");
    guess = scanner.nextInt();
    } while(guess != number);
    System.out.println("猜中了...XD");
    }
    } //改造后
    package cc.openhome;
    public abstract class GuessGame {
    public void go() {
    int number = (int) (Math.random() * 10);
    int guess;
    do {
    print("输入数字:");
    guess = nextInt();
    }while(guess != number);
    println("猜中了");
    }
    public abstract void print(String text);
    public abstract void println(String text);
    public abstract int nextInt();
    } 改造的好处:改造前只能控制台输出,改造后可以在控制台,也可以使用对话框图形界面等输入。
  • 2.2 如果想将该游戏改造成图形界面,应该进行一些什么操作?

         答:百度了一下,但是好像也没看懂什么,大概就是导入一个包,包内有相应的功能,再设计一个界面,界面上有控件。
  • 2.3 结合该例子,你觉得什么时候应该使用abstract?

         答:在内含抽象方法的类时,要在class前标示abstract,表示这是一个定义不完整的抽象类。
    就是当一个类没有充分的表示,就要将其抽象化,再根据实际情况进行修改
  • 2.4 重要:在这个例子中,变化的是什么,不变的是什么?尝试结合abstract、继承等概念进行说明。

         答:在这个例子中,变化的是输入的数字,生成的数字也是变化的并且是随机的。不变的是对数字的处理。

3. Comparable与Comparator

  • 3.1 描述Comparable接口的用途。为什么某个类实现了Comparable接口就可以直接使用Arrays.sort对其进行排序?

        答:Comparable接口实现它的每个类的对象进行整体排序,它有一个 compareTo方法进行比较。
    一个类如果实现了Comparable,就可以直接调用Arrays.sort,就是元素要使用arrays必须实现Comparable接口。
    Arrays.sort源代码中显示:sort将传入的参数强制转换为Comparable接口,且调用Comparable接口的compareTo方法对数组进行排序。
  • 3.2 有了Comparable接口为什么还需要Comparator接口呢?

        答:Comparable接口将比较代码嵌入自身类中,而Comparator在一个独立的类中实现比较。
    Comparable的方法参数只有一个,而Comparator的方法参数是两个,如果需要两个对象进行比较时就要使用Comparator接口。
    例如PTA实验的第二题是使用Comparator接口。

[参考链接:](http://www.cnblogs.com/gnuhpc/archive/2012/12/17/2822251.html)

4. 面向接口案例分析

阅读Case-StudentDao.zip案例

  • 4.1 画出类关系图,描述每个类与接口的作用。

          student类:关于名字的属性的类,有setter(),getter(),toString()方法。
    StudentDao(interface): public boolean writeStudent(Student student);
    public Student readStudent(String name);
    public void diplayAllStudent(); StudentDaoArrayImpl类: 构造数组students = new Student[size];
    输入学生的信息public boolean writeStudent(Student student)
    读取学生的名字public Student readStudent(String name)
    显示所有学生的信息public void diplayAllStudent()
    StudenDaoListImpl类:构建private List<Student> students = new ArrayList<Student>();
    与StudentDaoArrayImpl执行相同的功能,还有排序。

  • 4.2 StudenDaoListImpl与StudentDaoArrayImpl有何区别?

       答:StudentDaoArrayImpl使用的是数组,而StudenDaoListImpl使用的ArraysList。

5. 什么是面向接口编程?面向接口编程的好处是什么?

结合题目3与4中的Test.java的代码讨论分析。不要百度原封不动照搬!

             package chpt06;
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
Student[] students = new Student[3];
students[0] = new Student("Tom");
students[1]= new Student("Jerry");
students[2] = new Student("Sophia");
StudentDao sdm = new StudentDaoArrayImpl(50);//使用数组实现
//StudentDao sdm = new StudenDaoListImpl();//使用列表实现
//往后台写数据,无需考虑后台是什么(到底是数据库、文件、数组、List)
//因为这里是面向StudentDao接口
System.out.println("===========写入学生========");
for(Student e:students){
if (!sdm.writeStudent(e)){
System.out.println("添加学生失败");
}else{
System.out.println("插入成功!!");
}
}
System.out.println("===========显示所有学生========");
sdm.diplayAllStudent();
System.out.println("===========查询学生========");
Student temp = sdm.readStudent("Tom") ;
if(temp == null){
System.out.println("查无此人");
}
else{
System.out.println(temp);
}
}
} 答:该代码中StudentDao 是接口,student是所有学生信息的存取,StudentDaoArrayImpl是实现接口的数组类,StudenDaoListImpl
是实现接口的列表类。在同一个接口下的不同实现类可以没有相关联,只需要拥有接口实现的共同行为即可。
接口就是将没有关系的两个对象联系在一起。
面向接口编程是面向对象编程的一部分,看了百度,我的理解是系统中层次与层次之间的关系不是直接的,而是间接的。
就比如买家与卖家之间有个中介。
好处就是卖家想要修改要卖的东西,只要中介所执行的功能没有改变,买家就不会受到影响,也不需要更改条件。
面向接口可以将接口与实现相分离,从而大大提高程序的灵活性。

[百度参考](http://www.cnblogs.com/leoo2sk/archive/2008/04/10/1146447.html)

6.结对编程:面向对象设计(大作业2-非常重要)

内容:使用Java代码完成上周做的面向对象设计大作业,需要有初步界面。实现的功能尽量简单,少而精,只包含必要的功能,不要追求高大全。

写出:类图(尽量精简,不用太多子类,两个即可)、系统常用功能描述、关键代码与界面

形式: 两人依托码云合作完成。请在这里贴出你们的学号、姓名与任务分工。

注意: 再过几次课要讲Java图形界面编程,到时候要将该系统升级为图形界面。系统的业务逻辑部分应该变化不大,变化大的是输入与输出部分。所以编码的时候,输入(Scanner)与输出(System.out)的代码,请不要将其与某个业务处理函数绑死。

选做加分: 给出两人在码云上同一项目的提交记录截图,额外加分。注:两个人在码云上新建一个项目。

  • 6.1
学生A 项目代码地址
[博客地址](http://www.cnblogs.com/zhaoMing3/) http://git.oschina.net/zm3377/java201521123093zm)
  • 6.2常用功能描述框架图

  • 6.3关键代码

    待定,目前真写不出来

3. 码云上代码提交记录及PTA实验总结

题目集:jmu-Java-04-面向对象2-进阶-多态接口内部类

  • 3.1. 码云代码提交记录

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

  • 3.2. PTA实验

      答:5-1:在实验课上大概懂了一些方法,后面又参照之前写的一些代码,大致把实验写出来了。但是接口还有Comparable的使用一直出错,后面才知道自己把
    Comparable和Comparator搞混了,翻了书才知道。终于知道了Arrays.sort的使用了。。。。好像懂得太晚了。
    5-2:和第一题差不多,但第二题使用的是Comparator。

201521123093 java 第五周学习总结的更多相关文章

  1. 20165210 Java第五周学习总结

    20165210 Java第五周学习总结 教材学习内容 - 第七章学习总结 内部类: 内部类的外嵌类的成员变量在内部类中仍然有效,内部类中的方法也可以调用外嵌类中的方法. 内部类的类体中不可以声明类变 ...

  2. JAVA 第五周学习总结

    20175303 2018-2019-2 <Java程序设计>第五周学习总结 教材学习内容总结 •使用关键字interface来定义一个接口,定义接口分包含接口声明和接口体. •接口体中包 ...

  3. 20165326 java第五周学习笔记

    第五周学习笔记 ch7 内部类(&外嵌类) 内部类的类体不可以声明类变量和方法 内部类如同类的变量或方法 内部类和外嵌类在编译时生成两个class文件 匿名类 某个类的一个子类没有明显的用类声 ...

  4. Java第五周学习总结

    学号 2016-2017-2 <Java程序设计>第X周学习总结 教材学习内容总结 1.接口 (1)使用关键字interface来定义一个接口,接口分为接口声明和接口体,例如 interf ...

  5. 20165221 JAVA第五周学习心得

    课本知识点 内部类与异常类 内部类:在一个类中定义另一个类 特点:外嵌类的成员在内部类仍然有效,内部类也可调用外嵌类的方法,内部类的类体不能声明类变量及类方法 非内部类不能是static类 匿名类:创 ...

  6. 2016-2017-2 20155309南皓芯java第五周学习总结

    教材内容总结 这一周学习的进度和前几周比较的话是差不多的,都是学习两章. 异常处理 1.理解异常架构 2.牚握try...catch...finally处理异常的方法 3.会用throw,throws ...

  7. 201521123093 java 第六周学习总结

    1. 本周学习总结 1.1 面向对象学习暂告一段落,请使用思维导图,以封装.继承.多态为核心概念画一张思维导图,对面向对象思想进行一个总结. 注1:关键词与内容不求多,但概念之间的联系要清晰,内容覆盖 ...

  8. 201521123093 java 第三周学习总结

    1.本周学习总结 初学面向对象,会学习到很多碎片化的概念与知识.尝试学会使用思维导图将这些碎片化的概念.知识组织起来.请使用纸笔或者下面的工具画出本周学习到的知识点.截图或者拍照上传. 本周学习总结: ...

  9. 201521123093 java 第十三周学习总结

    1. 本周学习总结 以你喜欢的方式(思维导图.OneNote或其他)归纳总结多网络相关内容. 2. 书面作业 1. 网络基础 1.1 比较ping www.baidu.com与ping cec.jmu ...

随机推荐

  1. vs2013下载地址以及安装方法

    1.下载vs2013 http://download.microsoft.com/download/0/7/5/0755898A-ED1B-4E11-BC04-6B9B7D82B1E4/VS2013_ ...

  2. 【javascript】浅谈javaScript的深拷贝

        前言: 最开始意识到深拷贝的重要性是在我使用redux的时候(react + redux), redux的机制要求在reducer中必须返回一个新的对象,而不能对原来的对象做改动,事实上,当时 ...

  3. Python web框架总结

    web框架总结 前提 一个web框架需要包含的组件或者功能有: router orm request and response cookies and session template engine ...

  4. 在配置wem.xml后,Tomcat遇到问题,启动失败的解决方法

    前两天在写程序时,碰到了Tomcat无法启动的问题,就是在配置完web.xml后.想必好多小伙伴都有遇到吧. 如图: 出现这个错误的原因是:在配置web.xml的时候出现了错误! 如图所示,没有修改这 ...

  5. 一个基于JRTPLIB的轻量级RTSP客户端(myRTSPClient)——收流篇:(三)RTSP命令解析

    一.RTSP命令简述 RTSP是用来控制实时流媒体“播放”.“暂停”.“停止”.“录像”等行为的传输协议.该协议规定了一系列命令以及这些命令的发送格式,RTSP客户端可以通过发送这些指定的命令,从而控 ...

  6. tensorflow笔记(三)之 tensorboard的使用

    tensorflow笔记(三)之 tensorboard的使用 版权声明:本文为博主原创文章,转载请指明转载地址 http://www.cnblogs.com/fydeblog/p/7429344.h ...

  7. Linux中的内核链表

    链表中一般都要进行初始化.插入.删除.显示.释放链表,寻找节点这几个操作,下面我对这几个操作进行简单的介绍,因为我的能力不足,可能有些东西理解的不够深入,造成一定的错误,请各位博友指出. A.Linu ...

  8. 【PL/SQL Developer】动态执行表不可访问,本会话的自动统计被禁止

    在执行菜单里你可以禁止统计,或在v_$session,v_$sesstat 和 v_$statname 表里获得select权限 解决办法 [oracle@localhost ~]$ sqlplus ...

  9. 关于原根的存在性及个数(Primitive Root Theorem)

    我在RSA学习总结的第三部分关于Mille-Rabin素数测试的正确性证明里需要用到此定理,由于证明太长,故另开一章于此.(为啥我说话突然文绉绉了Orz,可能是这周辩论打多了) 结论是对素数p,mod ...

  10. sql unique约束详解

    UNIQUE 约束唯一标识数据库表中的每条记录. UNIQUE 和 PRIMARY KEY 约束均为列或列集合提供了唯一性的保证. PRIMARY KEY 拥有自动定义的 UNIQUE 约束. 请注意 ...