• java第五次作业


    1. 本周学习总结

    2. 书面作业

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

    //child
    public class test 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());
        }
    }
    //parent
    class Parent{
        private int i=1;
        protected int j=2;
        protected int geti(){
            return i;
        }
        public void getj(){
            System.out.println(j);
        }
    }
    
    //other
    class Other{
        public static void showParentj(Parent p){
            System.out.println(p.j);
            System.out.println(p.geti());
        }
        
    }
    //OutOfParentPackage
    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.1 com.parent包中Child.java文件能否编译通过?哪句会出现错误?试改正该错误。并分析输出结果。

    答:错的是 System.out.println(i);将private改成protected就可以了。
        分析:因为clild没有重新定义i和j的值,所以只用之用输出父类中的值,且加上super的方法名就是使用父类的方法,其余按照程序运行输出就可以了。
    

    运行结果

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

    答;编译出现了错误,` public static void showParentj(Parent p)`出现了错误,原因是找不到Parent。因为geti()的方法是protected的,所以外部无法访问,所以吧parent中的所有方法名和变量类型都设成public就可以了。
    

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

    //改造前
    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.1 Guess改造前代码很简单,而改造后的代码使用了抽象类、抽象方法看起来很复杂,那这样的改造到底有什么好处呢?

    改造前,未使用抽象类,只能控制台输出
    改造后,使用抽象类,可以在控制台,也可以使用对话框图形界面等输入
    

    2.2 如果想将该游戏改造成图形界面,应该进行一些什么操作?

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

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

    1.当父类不知道子类的方法实现方式时,可以用abstract。
    2.当有多个子类继承该方法,且实现方法不同时,可以用抽象类,有点像多态。
    

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

    答:变化的是控制台输入方法,不变的是方法实现的结果都一样。
        abstract是一种抽象方法,他没有具体的实现及输入输出的方式,所以需要继承该方法,并且给出实现的具体方式,否则抽象类是没有任何意义的。要有一个非抽象类的类去继承它才可以。
    

    3.Comparable与Comparator

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

    答:Comparable接口将比较代码嵌入自身类中。在开发中我们可能会遇到需要将一些对象有序的放入到集合中,这时候我们只需要让类实现java.lang.Comparable<T>接 口。
        因为Comparable接口只有`public int compareTo(T o);`一个方法,所以覆盖compareTo这个方法即可实现自动排序,这样就不用自己写一个排序的方法。
    

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

    答:因为comparable接口是一个内比较器,是强制排序的那种。
    但是我们实际运用中可能想要通过不同类型的比较方式去排序,所以就需要comparator,因为他是可以选择排序方式的。
    

    4.面对接口案例分析

    阅读Case-StudentDao.zip案例

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

    4.2 StudenDaoListImpl与StudentDaoArrayImpl有何区别?

    答:StudenDaoListImpl与StudentDaoArrayImpl各自的私有属性不同,即实现的数据结构不一样,StudenDaoListImpl是用ArrayList实现的,而StudentDaoArrayImpl是用数组
        实现的。所以两个类对于接口的抽象方法相同但是有不同的实现。两个类具体的方法是两种不同的。
    

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

        面向接口编程关注的是不同的类是否有共同的方法,不关心对象本身。
        题目3用到Comparable和Comparator两个接口,通过这两个接口,我们可以很方便地对自己定义的类进行比较,从而调用Arrays里面已经写好的sort()方法来排序。
        这个过程相当于面向接口编程。题目4也是如此,在Test类里面,我们只要关心数据到底是以何种数据结构来存放,不需要管具体的底层实现。用列表,数组都可以
        实现写入学生数据、读取学生数据和遍历学生信息的操作。
        当我不知道要以什么方式排序,只知道需要有排序功能时,那么我就必须使用接口告诉编译器,我这个类具有排序的功能。
        但是具体实现未知,具体实现之后再写。面向接口编程就是说我有这个功能,但是具体实现不知道,
        在设计时必须要考虑到各种功能,但是却不需要每一个都具体写出来,在做项目时让逻辑更清晰明白。
    
    1. 码云上代码提交记录及PTA实验总结

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

    3.2. PTA实验

    -Java接口是一系列方法的声明,是一些方法特征的集合。
    -一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为。
    -通过实现接口,达到将功能抽象化的作用,便于程序设计与维护。
    -本次实验更加清楚的知道了三种定义类型的继承范围。
    
  • 相关阅读:
    HTML、DIV+CSS网页制作中排版混乱的几种常见的情况
    ---------------------------------Javascript零基础到入门
    Bootstrap 框架、插件
    陌陌和请吃饭之类的应用,你要是能玩转,那就厉害了
    冬天去理短发脑门心冷,这时候你需要一顶暖和的棉绒帽子
    我感觉我右手食指要废了,不能双击的赶脚,太伤
    小李子你注定拿不了奥斯卡,谁他么让你长那么帅的
    3月16号的《人生元编程》读者见面会,有人去吗?
    新年要有新气象,额头上留一条杠!
    每日学习笔记12.29.2013
  • 原文地址:https://www.cnblogs.com/lsl321/p/6615993.html
Copyright © 2020-2023  润新知