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

    1. 本周学习总结

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

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

    1.接口不是类,不能使用new进行实例化
    2.使用instanceof运算符,可以查看该对象是否实现了Comparable接口
    3.接口可以扩展extends
    4.接口中可以包含常
    5.一个类可以实现多个接口
    参考资料:

    百度脑图
    XMind

    2. 书面作业

    Q1.代码阅读:Child压缩包内源代码
    1.1 com.parent包中Child.java文件能否编译通过?哪句会出现错误?试改正该错误。并分析输出结果。
    A:

    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());
        }
    }
    

    不能通过编译;这一句System.out.println(i);会出错;应将private改为protected;结果如下

    1.2 另外一个包中的OutOfParentPackage.java,能否编译通过?提示什么错误?分析原因。
    A:不能通过编译;提示的错误是The type Parent is not visible;原因是Parent类不是public的

    Q2.abstract进阶:阅读GuessGame抽象类的设计与使用源代码
    2.1 Guess改造前代码很简单,而改造后的代码使用了抽象类、抽象方法看起来很复杂,那这样的改造到底有什么好处呢?
    A:在被改造之前,整个代码未使用抽象类,所以输入输出都由控制台控制,然而在改造之后,在GuessGame类中,输入输出均是抽象类,所以可以在控制台输入输出也可以在图形界面输出
    2.2 如果想将该游戏改造成图形界面,应该进行一些什么操作?
    A:先导入java.swing.*包,然后调用包里的方法开始界面设计;接着设计一个用来猜数字的图形界面的类并且继承Guess中的抽象类;最后重写抽象类当中的抽象方法
    2.3 结合该例子,你觉得什么时候应该使用abstract?
    A:包含抽象方法的类叫做抽象类,就需要使用abstract,abstract修饰方法就是要求其子类覆盖(实现)这个方法。调用时可以以多态方式调用子类覆盖(实现)后的方法,也就是说抽象方法必须在其子类中实现,除非子类本身也是抽象类。我觉得抽象类像是一个模板,有了抽象类,就能让很多方法在此基础上不断延伸和拓展,所以当有多个不同的方法来执行同一种功能时可以用上abstract,这样会方便些
    2.4 重要:在这个例子中,变化的是什么,不变的是什么?尝试结合abstract、继承等概念进行说明。
    A:在这个例子中,变化的是输入的方法,可以采用不同的方法输入,如从控制台输入、从对话框图形界面输入等等。不变的是抽象方法,它可以使用不同方法的输入、输出,完成一个猜数的游戏。我们根据需求的不同来具体决定到底使用何种输入输出方法。这个类是抽象的,即没有具体的输入、输出的的方法这个游戏就没有办法进行。所以我们要有具体的方法来实现,而具体的实现要通过继承来完成。因为抽象类的抽象方法是没有具体定义的,也就是说一个抽象类,没有别的类去继承它,就很没有意义。所以我们要有不是抽象类去实现抽象类的抽象方法。这个实现的过程就是继承,继承抽象类的方法,然后通过复写的形式来具体实现方法的细节
    Q3.Comparable与Comparator
    3.1 描述Comparable接口的用途。为什么某个类实现了Comparable接口就可以直接使用Arrays.sort对其进行排序?
    A:Comparable接口将比较代码嵌入自身类中。在开发中我们可能会遇到需要将一些对象有序的放入到集合中,这时候我们只需要让类实现java.lang.Comparable接 口。因为Comparable接口只有public int compareTo(T o);一个方法,所以覆盖compareTo这个方法即可实现自动排序,这样就不用自己写一个排序的方法
    3.2 有了Comparable接口为什么还需要Comparator接口呢?
    A:Comparable接口和Comparator接口,两个都是用来实现集合中元素的比较、排序的。Comparable是在集合内部定义的方法实现的排序,Comparator是在集合外部实现的排序,Comparable接口是一个对象本身已经支持自比较所需要实现的接口。Comparator是一个另写一个外部类来实现的比较的接口
    Q4.面向接口案例分析
    阅读Case-StudentDao.zip案例
    4.1 画出类关系图,描述每个类与接口的作用。

    4.2 StudenDaoListImpl与StudentDaoArrayImpl有何区别?
    A:StudenDaoListImpl使用动态容器ArrayList,而StudentDaoArrayImpl使用的是固定了大小为80的数组
    Q5.什么是面向接口编程?面向接口编程的好处是什么?
    A: 面向接口编程关注的是不同的类是否有共同的方法,不关心对象本身。题目3用到Comparable和Comparator两个接口,通过这两个接口,我们可以很方便地对自己定义的类进行比较,从而调用Arrays里面已经写好的sort()方法来排序。这个过程相当于面向接口编程。题目4也是如此,在Test类里面,我们只要关心数据到底是以何种数据结构来存放,不需要管具体的底层实现。用列表,数组都可以实现写入学生数据、读取学生数据和遍历学生信息的操作。这样一来就很方便,就如计算机的UAB接口,不管是要接U盘还是手机类的外设,只关心接口一致就可以,至于内容就不管。这样就无须知道对象是用什么类来实现的,只须知道定义接口的抽象类。

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

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

    3.1. 码云代码提交记录

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

    3.2. PTA实验总结

    通过实验熟练的掌握了Comparable接口和编写comparaTo方法。

  • 相关阅读:
    linux grep --我最喜欢的命令~~
    svmrank 的误差惩罚因子c选择 经验
    转:机器学习中的算法(2)-支持向量机(SVM)基础
    转:关于python文件操作大全
    python 求两个时间差
    多个excel合并(excel2007)
    oracle12c 新建表空间
    数据库表被锁了
    join ,left join ,right join有什么区别
    最简洁的权限(菜单)控制
  • 原文地址:https://www.cnblogs.com/wangyan12345/p/6612403.html
Copyright © 2011-2022 走看看