zoukankan      html  css  js  c++  java
  • 20155231 2016-2017-2 《Java程序设计》第4周学习总结

    20155231 2016-2017-2 《Java程序设计》第4周学习总结

    教材学习内容总结

    学习目标

    • 理解封装、继承、多态的关系
    • 理解抽象类与接口的区别
    • 掌握S.O.L.I.D原则
    • 了解模式和设计模式
    • 能正确覆盖方法
    • 了解垃圾回收机制
    • 掌握Object类
    • 掌握enum

    第六章:继承与多态

    封装、继承、多态

    1. 继承:面向对象中,子类继承父类,避免重复定义的共同行为;
    2. extends关键字:在继承父类的程序代码基础上,补充定义新的程序代码,扩充其原本没有的行为;
    3. 继承的好处:避免重复的同时,若是要对相应的数据成员名称做修改,只需要在父类中修改即可;
    4. is-a:子类与父类之间是is-a(是一种)关系,编写代码时可以使用is-a检查语法的逻辑是否正确:从=右边往左读,看右边是不是左边的子类。当右边不是左边的子类的时候,程序编译错误,也可能存在检查为右边可能是左边子类的不确定的结果,这时可以执行(Cast)叫程序住嘴语法,错误时抛出ClassCastException.
    5. 多态:单一接口操作多种类型的对象。
    6. is-a关系:子类只能继承一个父类,即子类“是一种”父类,可用来判断如下代码片段:
    Role role1 = new Swordsman();
    
    Swordsman swordsman = new Role();
    
    1. 重新定义:在继承父类之后,定义与父类中相同的方法部署,但执行内容不同;在重新定义父类中某个方法时,子类必须撰写与父类方法中相同的签署;

    抽象类

    1. 方法区块中没有任何程序代码操作,使用abstract标示该方法为抽象方法,,类中若有方法没有操作,并且标示为abstract,表示类定义不完整,称为抽象类。
    2. java中可以使用interface来定义抽象的行为和外观。
    3. 子类继承抽象类的两种做法:继续标示该方法或者操作抽象方法。
    4. 为了工作的合理和编写的方便,写程序是可以先创建实例,然后执行go()方法过程中调用抽象方法。

    继承语法细节

    1. protected成员:被声明为protected的成员,相同包中的类可以直接存取,不同包中的类可以在继承后的子类直接存取;
    2. 重新定义的细节:重新定义方法时,若只是希望在父类中方法前后做点加工,可在父类中直接添加,想取得父类中的方法定义,只需在调用前加上super关键字;(使用super关键字调用的父类方法不能定义为private,同时,重新定义方法时,对于父类中的方法权限只能扩大不能缩小)
    3. JDK5之后,如果返回类型是父类中方法返回类型的子类,可通过编译;
    4. 构造函数:如果子类构造函数中没有指定调用父类中那个构造函数,默认会调用父类中无参数构造函数;
    5. final关键字:class前使用final,表示这是最后一个类不会再有子类;定义方法为final表示最后一次定义方法;
    6. java.lang.Object:定义类时若没有extends关键字,那一定是继承java.lang.Object;(顶层父类,Object上定义的方法所有对象都继承下来了,只要没有定义为final,都可以重新定义)
    7. tostring()、equals()都是Object类定义的方法,返回值类型分别为字符串型和布尔型;
    8. instanceof运算符:判断对象是否由某个类创建,左操作数是对象,右操作数是类,只要左操作数是右操作数的子类型,返回结果就为true;
    9. 垃圾收集:程序执行流程中无法再使用某个对象,该对象就是徒耗内存的垃圾,就会被回收;

    第七章:接口与多态

    接口

    1. 接口:可用于定义行为但不操作(表示拥有行为,是多重继承的一种方式),类要操作接口,就必须有implements关键字(为了生成与特定接口相符合的类);
    2. 接口中定义的方法的处理方式:操作接口中定义的方法、再度将其标示为abstract;

    接口语法细节

    1. 接口的默认:接口中的方法没有操作时,一定得是公开且抽象(interface关键字:定义抽象行为与外观);
    2. 枚举常数:为了在维护程序时使程序清晰;
    3. 匿名内部类:对于只使用一次的继承某个类的子类或接口操作类,不需为这些类定义名称;

    equals()

    1. equals()方法是Object类有定义的方法,程序代码:
    public boolean equals(Object obj){
    
         return (this==obj);
          }
    

    2.instanceof运算符:判断对象是否由某个类创建,左操作数是对象,右操作数十类。

    enum枚举常数

    enum可用于定义枚举常数。enum定义了特殊类,继承自java.lang.Enum,由编译程序处理,直接撰写会被拒绝。
    教材学习中的问题和解决过程

    教材学习中的问题和解决过程

    • 问题1:如何判断一段程序是否是合法的多态语法?
    Swimmer swimmer = new Shark();
    Swimmer swimmer = new Human();
    Swimmer swimmer = new Submarine();\编译通过
    
    • 解决过程:判断右边是否拥有左边的行为,即右边对象是否操作了左边接口;
    Shark shark = swimmer;\编译失败
    

    因为有Swimmer行为的不一定是shark实例,此时需要加上扮演语法:

    Shark shark = (Shark) swimmer;
    

    即执行时参考shark实例,让其扮演shark(实际参考对象与扮演对象要一致,否则报错);

    代码调试中的问题和解决过程

    • 问题:在编译时找不到类

    • 解决:在编译时用classpath规定路径。

    代码托管

    代码提交过程截图

    代码量截图

    上周考试错题总结

    • 2.填空:~0b1010的十进制值是(-11)
    • 4.填空:System.out.println(“”+52+25);的结果是(5225)
    • 18.CH04 填空: p109 Average.java 求1,2,3,4,5的平均值的命令是(java cc.openhome.Average 1 2 3 4 5
    • 26.CH05 填空:调用p145 sum函数计算1+2+3+4+5的代码是(MathTool.sum(1,2,3,4,5))
    • 28.CH05 填空:Java中类的成员变量必须进行初始化,否则会出语法错误。(X)

    其他(感悟、思考等,可选)

    本次学习中,有很多新的概念,和之前的c语言有了很大区别。没有太懂,还需要接着学习。

    学习进度条

    代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
    目标 5000行 30篇 400小时
    第四周 334/732 1/4 12/80

    参考:软件工程软件的估计为什么这么难软件工程 估计方法

    • 计划学习时间:20小时

    • 实际学习时间:12小时

    参考资料

  • 相关阅读:
    Quartz 基本概念及原理
    quartz-2.2.x 快速入门 (1)
    hive踩过的小坑
    spring profile 多环境配置管理
    win10窗口设置眼睛保护色
    优雅地在markdown插入图片
    Using Spring Boot without the parent POM
    isDebugEnabled作用
    Log 日志级别
    为什么要使用SLF4J而不是Log4J
  • 原文地址:https://www.cnblogs.com/javasyn/p/6582797.html
Copyright © 2011-2022 走看看