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

    1. 本周学习总结

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

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

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

    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的。
      参考1`

    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 画出类关系图,描述每个类与接口的作用。

    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历史-设置时间段”, 然后搜索并截图

    3.2. PTA实验

    • 继续完成前面未完成的实验面向对象1-基础-封装继承
    • 函数(选做:4-1)、编程(5-1, 5-2)
    • 一定要有实验总结
      在编程中学会了compareTo的应用,在课上经过指导后可以顺利编出代码。
  • 相关阅读:
    出自 HTML4 规范的可用颜色字符串值列表(常用颜色名称及对应的十六进制值)
    HTML5 Canvas 八星聚义动态效果
    HTML5 Canvas 绘制澳大利亚国旗
    HTML5 Canvas 绘制新西兰国旗
    HTML5 Canvas 绘制加拿大枫叶旗
    HTML5 Canvas 绘制英国国旗
    HTML5 Canvas 绘制星条旗
    当类中的方法全部都是 static 关键字修饰时 ,它的构造方法最好作为 private 私有化,理由是方法全是 static, 不知道的人会去new对象去调用,需要调用构造方法。 但 static的方法直接用类名调用就行!
    【Java面试复习经典】传智播客Java就业班入学测试题及答案解析(2014年版)
    【Java面试复习经典】传智播客Java就业班入学测试题及答案解析(2012年版)
  • 原文地址:https://www.cnblogs.com/hdf433/p/6618019.html
Copyright © 2011-2022 走看看