博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
201521123032《Java程序设计》第5周学习总结
阅读量:4343 次
发布时间:2019-06-07

本文共 3645 字,大约阅读时间需要 12 分钟。

1. 本周学习总结

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

1109725-20170325185630221-691603782.png

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

参考资料:

百度脑图
XMind

2. 书面作业

作业参考文件下载

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

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

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

1109725-20170325185728205-2122847044.png

不能编译通过。如上图所示System.out.println(i);有误。因为设定时把i设为私有的无法访问,修改private为protected就可以编译了。输出结果如下图。

1109725-20170325185746299-1533820914.png

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

import com.parent.*;public class OutOfParentPackage{    public static void showParentj(Parent p){        System.out.println(p.j);        System.out.println(p.geti());        p.getj();    }}

1.3 回答:如果为了访问到protected修饰的属性或方法应该怎么办?

只要是与protect同包或是子孙包或者是protceted的当前类都可以访问。

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?

`1. 如果一个类本身继承自一个abstract类,但是并不是所有被继承类的abstract方法被重载。

  1. 当这个类里面至少有一个方法是abstract的。
    参考`

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

在这个例子中,变化的是输入的方法,可以从控制台的输入变化到图形界面的输入。不变的是方法,最后的输出结果是没有变化的。

3. Comparable与Comparator

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

comparable接口的对象可直接用于比较。实现compareble需要覆盖compareTo方法,就可以直接排序了。

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

用Comparable要修改源代码,用Comparator 的好处是不需要修改源代码, 而是另外实现一个比较器, 当某个自定义的对象需要作比较的时候,把比较器和对象一起传递过去就可以比大小了。 以上参考都来自[B](http://www.cnblogs.com/sunflower627/p/3158042.html)

3.3 可选:使用匿名内部类、Lambda表达式实现PTA编程5-2。

4. 面向接口案例分析

阅读Case-StudentDao.zip案例

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

1109725-20170325185824705-498033606.png

StudentDaoArrayImpl和StudenDaoListlmpl是StudentDao的子类。

4.2 StudenDaoListImpl与StudentDaoArrayImpl有何区别?

StudenDaoListImpl是用ArrayList实现的,而StudentDaoArrayImpl是用数组实现的。

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

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

面向接口编程即系统设计时候把一个个部分分开编写,最后在程序中使用他们。在题目4的例子中,先写了StudentDao,然后另外分别编写StudenDaoListlmpl,StudentDaoArraylmpl,最后一起实现。

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

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

3.1. 码云代码提交记录

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

3.2. PTA实验

  • 继续完成前面未完成的实验面向对象1-基础-封装继承
  • 函数(选做:4-1)、编程(5-1, 5-2)
  • 一定要有实验总结
    在编程中学会了compareTo的应用,在课上经过指导后可以顺利编出代码。

转载于:https://www.cnblogs.com/hdf433/p/6618019.html

你可能感兴趣的文章
MySQL存储过程定时任务
查看>>
Python中and(逻辑与)计算法则
查看>>
POJ 3267 The Cow Lexicon(动态规划)
查看>>
设计原理+设计模式
查看>>
tomcat 7服务器跨域问题解决
查看>>
前台实现ajax 需注意的地方
查看>>
Jenkins安装配置
查看>>
个人工作总结05(第二阶段)
查看>>
Java clone() 浅拷贝 深拷贝
查看>>
深入理解Java虚拟机&运行时数据区
查看>>
02-环境搭建
查看>>
spring第二冲刺阶段第七天
查看>>
搜索框键盘抬起事件2
查看>>
阿里百川SDK初始化失败 错误码是203
查看>>
透析Java本质-谁创建了对象,this是什么
查看>>
BFS和DFS的java实现
查看>>
关于jquery中prev()和next()的用法
查看>>
一、 kettle开发、上线常见问题以及防错规范步骤
查看>>
eclipse没有server选项
查看>>
CRC码计算及校验原理的最通俗诠释
查看>>