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

    20155305乔磊2016-2017-2《Java程序设计》第四周学习总结

    教材学习内容总结

    继承

    • 继承就是避免多个类间重复定义共同行为。
    • 面向对象中,子类继承父类,就是把程序中相同的代码部分提升为父类。
    • extends关键字,表示前者会扩充后者的行为,即继承后者的行为。fight()为SwordsMan扩充的Role没有的行为。
    • private成员也会被继承,不过子类无法直接存取,必须通过父类提供的方法存取。

    is-a(是一种)关系

    • 子类只能继承一个父类,这种子类父类之间的关系就是is-a关系。
    • 检查语法逻辑是否正确,方式是从=右边往左读:判断右边是不是一种左边。例:Role role1=new SwordsMan();即判断SwordsMan是不是一种Role?若是则语法正确,反之则编译失败。
    • 强制让后者是一种前者:Role role1=new SwordsMan();SwordsMan swordsman=(SwordsMan) role1;

    多态

    • 使用单一接口操作多种类型的对象,具有更高的可维护性。

    • Java以继承及界面来实现多态,是次态多态的一种实现。

        public class RPG2
        {
            public static void main (String[] args)
            {
                SwordsMan swordsMan = new SwordsMan();
                swordsMan.setName("Justin");
                swordsMan.setLevel(1);
                swordsMan.setBlood(200);
      
                Magician magician = new Magician();
                magician.setName("Moinca");
                magician.setLevel(1);
                magician.setBlood(100);
      
                showBlood(swordsMan);   //SwordsMan是一种Role
                showBlood(magician);
            }
            static void showBlood(Role role)   //声明为Role类型
            {
                System.out.printf("%s 血量 %d%n",role.getName(), role.getBlood());
            }
        }
      

    重新定义行为

    • SwordsMan与Magician的fight()方法签署的都是public void fight(),操作接口相同,只是方法操作内容不同,因此,可以将fight()方法提升至Role类中定义。
    • 如果传入drawFight()的是SwordsMan,role参数参考的就是SwordsMan实例,操作的就是SwordsMan上的fight()方法定义。
    • 重新定义父类中某个方法时,子类必须撰写与父类方法中相同的签署。可以在子类中某个方法前使用@Override要求编译程序检查该方法是不是真的重新定义了父类中某个方法,如果不是会引发编译错误。
    • 对于父类中的方法权限,只能扩大不能缩小。

    抽象方法 抽象类

    • 抽象方法:某方法区块中没有任何程序代码操作,用abstract表示该方法为抽象方法,不用撰写{}区块,直接";"结束即可。
    • 抽象类:内含抽象方法的类,一定要在class前标示abstract,表示类定义不完整,不能用来生成实例。

    protected

    • 被声明为protected的成员,相同包中的类可以直接存取,不同包中的类可以在继承后的子类直接存取。
    • private、无关键字、protected、public权限依次递增。

    构造函数

    • 类有继承关系时,会先进行父类定义的初始流程,再进行子类定义的初始流程。
    • 父类中可以重载多个构造函数,如果子类构造函数中没有制定执行父类中哪个构造函数,默认会调用父类中无参数构造函数。
    • this()super()只能择一调用,并且要写在构造函数第一行执行。

    final关键字

    • class或方法被声明为final,表示这是最后一个,不会再有子类或子类不可以重新定义方法。

    java.lang.Object

    • java.lang.Object是最上层父类,Java中所有对象一定是一种Object。

    接口的默认

    • Java中可以使用interface来定义抽象的行为和外观。
    • 接口中的方法没有操作时一定得是公开且抽象的。
    • 接口可以继承别的接口,也可以同时继承两个以上的接口,同样也是用extends关键字,这代表了继承父接口的行为。

    匿名内部类

    • 临时继承某个类或操作某个接口并建立实例,由于这类子类或接口操作类只使用一次,不需要为这些类定义名称,可以使用匿名内部类。

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

    • 问题:本来像书上p167中的fight()方法运行都没有问题,但是按照书上p169抽象方法与抽象类中,将前面的Role.java中的fight()方法改成如下的格式public abstract void fight();之后,RPG.java就运行不了了。
    • 解决方法:待解决。

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

    • 问题:Guest访客名称,访客名单在run的时候出现了问题

      后来在run edit中发现自己把各项都改成了Guest
    • 解决方法:把run edit中各项改了

      运行结果正确

    代码托管

    上周考试错题总结

    • 填空:Linux Bash中,(grep )命令可以进行全文搜索。
    • 填空:System.out.println(“”+52+25);的结果是(5225)
    • 填空:System.out.println(52+25+””);的结果是(77)
    • 填空:p86 命令行下编译Guess.java的命令是(javac -d . Guess.java)
    • 填空:两个Integer对象比较大小,可以使用(comareTo())方法
      上网查Interger对象的比较方法写的是ValueOf()。老师答案是comareTo()。不太理解。
    • 填空:“30”转化为byte类型的30的语句是(Byte.parseByte(“30”);)。

    学习进度条

    代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
    目标 3000行 20篇 400小时
    第一周 200/200 1/1 18/18
    第二周 153/353 1/2 18/36
    第三周 356/709 1/3 24/60
    第四周 450/1259 1/4 28/85

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

    参考资料

  • 相关阅读:
    beta分布
    python中os.walk浏览目录和文件
    (zz)Linux下Gcc生成和使用静态库和动态库详解
    GNU scientific library
    python 字典有序无序及查找效率,hash表
    Python代码分析工具之dis模块
    python里的坑。http://www.pythoner.com/356.html
    python实现单向链表
    Python 执行字符串表达式函数(eval exec execfile)
    版本管理神器git上手
  • 原文地址:https://www.cnblogs.com/20155305ql/p/6537588.html
Copyright © 2011-2022 走看看