zoukankan      html  css  js  c++  java
  • 201521123001《Java程序设计》第5周学习总结

    1. 本周学习总结

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

    1.2 可选:使用常规方法总结其他上课内容。
    答:关于接口:
    1.接口是一种抽象,抽取出了共同行为;
    2.能够更加清晰地把系统的实现细节与接口分离,调用时只需要关心接口就行了;
    3.接口是用于描述系统对外提供的所有服务,客户只需要针对接口编程即可。

    2. 书面作业

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

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

    package parent;
    
    public class OutOfParentPackage{
        public static void showParentj(Parent p){
            System.out.println(p.j);
            System.out.println(p.geti());
            p.getj();
        }
    }
    class Parent{
        private int i=1;
        protected int j=2;
        protected int geti(){
            return i;
        }
        public void getj(){
            System.out.println(j);
        }
    }
    class Other{
        public static void showParentj(Parent p){
            System.out.println(p.j);
            System.out.println(p.geti());
        }
        
    }
    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());
        }
    }
    

    1.com.parent包中Child.java文件不能编译通过;
    2.System.out.println(i);这一句会出错;
    3.因为Parent()中的I被private(类外部无法对其直接访问)修饰,子类无法访问;
    4.将private int i=1;改为protected int i=1;

    1.2 另外一个包中的OutOfParentPackage.java,能否编译通过?提示什么错误?分析原因。如何更改才能使之正常编译?
    答:
    1.另外一个包中的OutOfParentPackage.java不能编译通过;
    2.提示的错误是The type Parent is not visible;Parent类无法访问;
    3.原因是parent()没有被public修饰,系统默认只能在包内被访问,而OutOfParentPackage在包外,无法访问parent();
    4.给parent()加上public关键字。

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

    2.1 Guess改造前代码很简单,而改造后的代码使用了抽象类、抽象方法看起来很复杂,那这样的改造到底有什么好处呢?
    答:
    1.改造前,未使用抽象类,只能控制台输出;
    2.改造后,使用抽象类,可以在控制台,也可以使用对话框图形界面等输入,能够更加清晰地把系统的实现细节与接口分离,只需要针对抽象类编程即可。
    2.2 如果想将该游戏改造成图形界面,应该进行一些什么操作?
    答:设计一个用来猜数字的图形界面的类继承Guess中的抽象类,在图形界面进行输入输出的操作。
    2.3 结合该例子,你觉得什么时候应该使用abstract?
    答:抽象类就应该使用abstract进行修饰,这个类将不能生成对象实例,可以做为对象变量声明的类型。
    2.4 重要:在这个例子中,变化的是什么,不变的是什么?尝试结合abstract、继承等概念进行说明。
    答:
    1.变化的是输入输出环境(控制台、对话框、图形界面等);
    2.没有变化的是抽象类(abstract),即输入输出是为了完成猜数游戏,与具体的环境无关,就像通过接口可以实现不相关类的相同行为,而不需要考虑这些类之间的层次关系。

    3. Comparable与Comparator

    3.1 描述Comparable接口的用途。为什么某个类实现了Comparable接口就可以直接使用Arrays.sort对其进行排序?
    答:
    1.通过接口可以实现不相关类的相同行为,让一个类具有了各种无限的可能,并且相同接口的类,不一定要有继承关系;
    2.所有实现Comparable的对象都有一个共同的特性:可以被比较,Arrays.sort就是面向Comparable接口进行编程,所以实现了Comparable接口就可以直接使用Arrays.sort对其进行排序。
    3.2 有了Comparable接口为什么还需要Comparator接口呢?
    答:Comparable接口和Comparator接口都可以用来实现集合中元素的比较、排序,但ComparableComparable 定义在 Person类的内部,是在集合内部定义的方法实现的排序,Comparator定义在Person的外部,是在集合外部实现的排序,Comparable接口是一个对象本身已经支持自比较所需要实现的接口。
    3.3 可选:使用匿名内部类、Lambda表达式实现PTA编程5-2。

    4. 面向接口案例分析

    阅读Case-StudentDao.zip案例
    4.1 画出类关系图,描述每个类与接口的作用。
    答:

    Student类:初始化String name,被StudentDaoArrayImpl和StudenDaoListImpl引用;
    StudentDaoArrayImpl类:对StudentDao接口操作,用数组来存放学生信息,包含方法Student readStudent(String name) 、boolean writeStudent(Student student) 和void diplayAllStudent();
    StudenDaoListImpl类:对StudentDao接口操作,用列表来存放学生信息,包含方法Student readStudent(String name) 、boolean writeStudent(Student student) 和void diplayAllStudent();

    4.2 StudenDaoListImpl与StudentDaoArrayImpl有何区别?
    答:StudenDaoListImpl是ArrayList(动态)的,大小可以随student的改变而改变;而StudentDaoArrayImpl是用数组实现的,数组的大小和数据类型都已经固定了。

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

    结合题目3与4中的Test.java的代码讨论分析。不要百度原封不动照搬!
    答:
    什么是面向接口编程:个人理解是使用同一个方法解决不同问题,定义一个类,使得其他引用对象不需要再次编程就能实现功能,简化了编程过程,提高效率,节省时间,类似于造一架飞机,坐飞机的人不需要知道这架飞机是怎么造出来的,也能乘坐这架飞机到达目的地;
    为什么要用接口 :用于处理多变的情况,接口在实际开发过程中最大好处是,可以按照设计,先把接口写好,然后在具体实践的时候,可以用已经写好的接口去实现具体功能,再写那些已经写好但是没有具体的代码的接口,这样可以提高工作效率。

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

    内容:使用Java代码完成上周做的面向对象设计大作业,需要有初步界面。实现的功能尽量简单,少而精,只包含必要的功能,不要追求高大全。
    写出:类图(尽量精简,不用太多子类,两个即可)、系统常用功能描述、关键代码与界面
    形式: 两人依托码云合作完成。请在这里贴出你们的学号、姓名与任务分工。
    注意: 再过几次课要讲Java图形界面编程,到时候要将该系统升级为图形界面。系统的业务逻辑部分应该变化不大,变化大的是输入与输出部分。所以编码的时候,输入(Scanner)与输出(System.out)的代码,请不要将其与某个业务处理函数绑死。
    选做加分: 给出两人在码云上同一项目的提交记录截图,额外加分。注:两个人在码云上新建一个项目。
    参考资料:
    结对编程参考资料
    可以使用Processon画图

    第6题提交作业的结构:
    6.1

    学生A 学生B 项目地址
    http://git.oschina.net/dfcat http://git.oschina.net/gemola http://git.oschina.net/dfcat/java
    我从另一个项目里直接拉了个人过来,还没开始做。。。
    6.2 常用功能描述框架图
    6.3 关键代码
    6.4 运行界面

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

    题目集:jmu-Java-04-面向对象2-进阶-多态接口内部类
    3.1. 码云代码提交记录

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

    3.2. PTA实验

    继续完成前面未完成的实验面向对象1-基础-封装继承
    函数(选做:4-1)、编程(5-1, 5-2)
    一定要有实验总结
    答:由于Arrays.sort不能对自定义对象进行排序,我就想把PersonSortable类的数据用toString强制转换成字符串进行比较,用Comparable接口使得Arrays.sort生效。

  • 相关阅读:
    Idea启动多服务时的Dashboard展示
    通过maven动态配置spring boot配置文件
    辅域抢夺五大角色命令
    H3C交换机堆叠技术
    KMS激活专用:所有Windows版本的GVLK密钥对照表
    Windows Server 2012从Evaluation版转成正式版
    u盘装系统无法引导
    [调优]彻底解决RDP连接过程缓慢的问题
    [排错]无法初始化 vGPU“grid_p40-1q”的插件“/usr/lib64/vmware/plugin/libnvidia-vgx.so”
    Virtual Apps and Desktops 7 1912 LTSR集成DB迁移到SQL Server 2016 AlwaysOn生产环境
  • 原文地址:https://www.cnblogs.com/kawajiang/p/6597922.html
Copyright © 2011-2022 走看看