zoukankan      html  css  js  c++  java
  • 201521123103 《Java学习笔记》 第五次学习总结

    一、本周学习总结

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

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

     (1)、接口更灵活、更方便,可以方便的为现有的系统添加新的功能。
     (2)、is-a 就使用继承,has-a就是用接口。
    

    二、书面作业

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

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

     答:com.parent包中Child.java文件不能编译通过,System.out.println(i);这一句会出现错误。因为private是私有的,其他不能调用它。所以要将com.parent包中Child.java文件里的private int i=1改为protected int i=1。
    


    1.2 另外一个包中的OutOfParentPackage.java,能否编译通过?提示什么错误?分析原因。

     答:不能,提示错误The type Parent is not visible。因为上课讲的protected只对本包的所有类可见,而OutOfParentPackage.java是在另外一个包里面的。如果想要修改,只需要修改parent包中Parent类中的控制可见性的控制符几个protected改为public即可。
    

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

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

    答:由参考文件可知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 如果想将该游戏改造成图形界面,应该进行一些什么操作?

     答:设计一个用来猜数字的图形界面的类并且继承Guess中的抽象类,然后用图形界面支持的输入输出语句来重写抽象类当中的抽象方法。
    

    2.3 结合该例子,你觉得什么时候应该使用abstract?

     答:如果该类中有抽象方法,则要用abstract,也就是说在具体的实现方法未定义的时候,需要我们用到abstract。
    

    2.4 重要:在这个例子中,变化的是什么,不变的是什么?尝试结合abstract、继承等概念进行说明。

     答:变化的是输入方法,不变的是抽象方法。因为抽象方法没有具体的定义,需要根据具体要求写一个外部的类、方法继承这个抽象类,但如果继承的话就对抽象方法有了重新的定义,就如本例中ConsoleGame类继承了抽象类GuessGame。
    

    3、Comparable与Comparator

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

     答:Comparable接口抽象出了比较的共同特性:待比较的对象,比较的结果,对实现它的每个类的对象进行排序,实现此接口的对象列表和数组可以通过 Arrays.sort进行排序。
         因为Comparable接口有compareTo一个方法,覆盖这个方法就能排序了,直接调用Arrays.sort就可以对元素进行排序。
    

    3.2 有了Comparable接口为什么还需要Comparator接口呢?

     答:因为Comparable接口的缺点是只能按照一种规则排序;而使用Comparator接口可以对比较方式进行修改。
    


    4、面向接口案例分析:阅读Case-StudentDao.zip案例

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

     答:Student类定义了对象的姓名以及其输出的格式,有toString()方法;StudentDao接口提供了判断是否写入数据、读数据、输出所有学生对象的方法;StudenDaoListImpl类是对StudentDao接口中的三个抽象方法的具体实现,用ArrayList的具体方法来完成相应操作。;StudentDaoArrayImpl类也是对StudentDao接口中的三个抽象方法的具体实现:readStudent(String) 读取学生信息,如果找不到返回null;diplayAllStudent()遍历整个数组,没找到学生信息返回false,对象为非空则输出学生信息;writeStudent(Student )添加学生信息,添加成功返回true。
    

    4.2 StudenDaoListImpl与StudentDaoArrayImpl有何区别?

     答:本质是属性不同:StudentDaoArrayImpl使用的是数组,StudenDaoListImpl使用的ArraysList。所以两个类对于接口的抽象方法,就会有不同的实现。
    

    5、什么是面向接口编程?面向接口编程的好处是什么?结合题目3与4中的Test.java的代码讨论分析。不要百度原封不动照搬!

     答:面向接口编程是根据接口的设计与属性,按照其实现方法进行编程,其实是面向对象编程的一部分。
         好处:结构清晰,扩展性好,提高复用性,我觉得,面向接口编程能够使整个代码都很有条理,在修改的时候很方便。
         参考链接:http://baike.baidu.com/item/面向接口编程/6025286?sefr=cr
    

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

    3.1. 码云代码提交记录

    3.2. PTA实验

     实验总结:
        (1)感觉这次实验会有一丝丝的成就感,因为在编写过程中问题少了很多,对定义类掌握的比之前熟练了;  
        (2)学会了使用Arrays.sort进行排序以及如何实现Comparable接口,比如:5-1:实现先对name升序排序,如果name相同则对age进行升序排序;
        (3)知道了可以编写不同的Comparator来满足多样的排序需求。比如:5-2:对年龄进行排序使用Comparator来编写;
        (4)发现自己的问题是不怎编写main方法,说明自己的编程还太少,得继续加强。
  • 相关阅读:
    HBase 高性能加入数据
    Please do not register multiple Pages in undefined.js 小程序报错的几种解决方案
    小程序跳转时传多个参数及获取
    vue项目 调用百度地图 BMap is not defined
    vue生命周期小笔记
    解决小程序背景图片在真机上不能查看的问题
    vue项目 菜单侧边栏随着右侧内容盒子的高度实时变化
    vue项目 一行js代码搞定点击图片放大缩小
    微信小程序进行地图导航使用地图功能
    小程序报错Do not have xx handler in current page的解决方法
  • 原文地址:https://www.cnblogs.com/yayaya/p/6618079.html
Copyright © 2011-2022 走看看