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的应用,在课上经过指导后可以顺利编出代码。
  • 相关阅读:
    POJ 3268 Silver Cow Party (Dijkstra)
    怒学三算法 POJ 2387 Til the Cows Come Home (Bellman_Ford || Dijkstra || SPFA)
    CF Amr and Music (贪心)
    CF Amr and Pins (数学)
    POJ 3253 Fence Repair (贪心)
    POJ 3069 Saruman's Army(贪心)
    POJ 3617 Best Cow Line (贪心)
    CF Anya and Ghosts (贪心)
    CF Fox And Names (拓扑排序)
    mysql8.0的新特性
  • 原文地址:https://www.cnblogs.com/hdf433/p/6618019.html
Copyright © 2011-2022 走看看