20145325张梓靖 《Java程序设计》第4周学习总结

20145325张梓靖 《Java程序设计》第4周学习总结

教材学习内容总结

  • 何谓继承

    • 继承共同行为 继承基本上就是避免多个类间重复定义共同行为;可把相同的程序代码提升为父类;用关键字 extends 来继承父类( private 成员会被继承,只不过子类无法直接存取,必须通过父类提供的方法来存取)
    • 多态与 is-a 在java中,子类只能继承一个父类;检查语法的逻辑是否正确,方式是从=号右边往左读:右边是不是一种左边呢;例:
    Role role1 = new SwordsMan();
    SwordsMan swordsMan = role1;
    

    对于第一行, SwordsMan是一种 Role,所以编译通过;对于第二行, Role不一定是一种 SwordsMan,因为还有可能是一种 Magician

    可使用扮演(Csat),让代码通过编译;例:

    Role role2 = new Magician();
    SwordsMan swordsMan = (SwordsMan) role2;
    

    代码可以编译成功,但由于实际上,role2 参考的是 Magician,而你却要让魔法师假扮为剑士,这在执行上会是个错误。

    • 重新定义行为 重新定义,即为在继承父类之后,定义与父类中完全相同的方法部署,但执行内容不同;可在重新定义方法的前面加上 “@Override” ,表示要求编译程序检查,该方法是不是真的重新定义了父类中某个方法。
    • 抽象方法、抽象类 如果某方法区块中真没有任何程序代码操作,可以使用 abstract 标示该方法为抽象方法,该方法不用撰写 {} 区块,直接 “; ”结束即可;如果某个类中,有方法定义为了 abstract 型,则必须在此类的 class 前标示 abstract
  • 继承语法细节

    • protected 被声明为 protected 的成员,相同包中的类可以直接存取,不同包中的类可以在继承后的子类直接存取;Java中,有3个权限关键字,但实际上有4个权限范围,因为没有定义权限关键字,默认就是包范围。
    • 重新定义的细节 要注意,对于父类中的方法权限,只能扩大但不能缩小(即若原来成员为 public,则子类中重新定义时不可为 private 或 protected);在 Java中,如果想取得父类中的方法定义。可以在调用方法前,加上 super 关键字; static 方法属于类拥有,如果子类中定义了相同签署的 static 成员,该成员属于子类所有,而非重新定义, static 方法也没有多态。
    • 再看构造函数 在创建子类实例后,会先执行父类构造函数定义的流程,再执行子类构造函数定义的流程;如果子类构造函数中没有指定执行父类中那个构造函数,默认会调用父类中无参数构造函数;可使用 super() 来指定执行父类中的某构造函数。
    • 再看 final 关键字 class 前使用了 final ,那么久表示这个类是最后一个了,不会再有子类,也就是不能被继承;定义方法时,也可限定该方法为 final ,这表示最后一次定义方法了,也就是子类不可以重新定义 final 方法。
    • java.lang.Object 在Java 中,子类只能继承一个父类,如果定义类时没有使用 extends 指定继承任何类,那一定是继承 java.lang.Object ,任何类追溯至最上层父类,一定是 java.lang.Object ,也就是 Java 中,所有对象,一定“是一种” Object ,都可以使用 Object 声明的名称来参考;可使用 Object[] 来收集各种对象; toString() 与 equals() 都是 Object 类定义的方法。
    • 关于垃圾收集 JVM 有垃圾收集(GC)机制,执行流程(目前我们只接触过 main()程序进入点开始之后的主流程)中,无法通过变量参考的对象(就是没有牌子的对象),就是 GC 认定的垃圾对象。
  • 接口

    使用 interface 定义接口,使用 implements 操作接口。
    
    编写接口时,里面的方法都是抽象方法,必须是 `public abstract`,当然也可省略不写,编译程序会自动补充,对于接口,可以定义枚举常数(一定要用 “=” 指定值),必须是 `public static final`,当然也可以省略,编译程序也会自动补充(类中也可以定义枚举常数,不过来要写明 `public static final`)。
    
    一个类,可以操作多个接口,也可以同时继承某个类,并操作某些接口;接口可以继承另一个接口,也就是继承父类接口行为。
    
    对接口中定义的方法有2种处理方法,一是操作接口中定义的方法,二是再度将方法标示为 abstract 。
    
    以Java语意来说,继承为“是一种”关系,操作接口为“拥有行为”。
    
  • 多态

    如果一个类中定义了一个方法,这个方法的参量为某个接口时,只要是操作这个接口的对象,都可以使用这个方法
    
  • 匿名内部类

    在Java中,经常会有临时继承某个类或操作某个接口并建立实例的需求,由于这类子类或接口操作类只使用一次,不需要为这些类定义名称,这时就可以使用匿名内部类来解决这个需求。
    ```
    new 父类()|接口(){
      	//类本体操作
    }
    ```
    
  • enum

    enum定义了特殊的类,继承自 `java.lang.Enum` ,不过这是由编译程序处理,直接撰写程序继承 Enum 类会被编译程序拒绝。
    ```
    public enum Action{
      	STOP,RIGHT,LEFT,UP,DOWN
    }
    ```
    

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

  • 问题 匿名内部类定义的方式?
  • 解决过程

1.首先验证基本程序的正确性:

正确

        2.当匿名内部类只重新定义方法,对枚举常数没有操作时:

可以

        3.当匿名内部类重新定义方法,对枚举常数照接口写入:

可以

        4.当匿名内部类重新定义方法,并新定义了另外的枚举常数时:

不可以

        5.同理,当匿名内部类重新定义方法,并新定义了方法时:

不可以

        6.当匿名内部类重新定义方法时,没有定义完接口中的:

不可以

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

调试中,书上章节关于匿名内部类的,还存在一些疑惑,等弄明白后,会再详细叙述的。

代码托管

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 3500行 28篇 300小时
第一周 150/150 1/1 20/20
第二周 100/250 1/2 22/42
第三周 150/400 2/4 21/63
第四周 1000/1400 1/5 27/90

参考资料

posted @ 2016-03-27 21:40  20145325张梓靖  阅读(136)  评论(4编辑  收藏  举报