20145334赵文豪 《Java程序设计》第4周学习总结

20145334赵文豪 《Java程序设计》第4周学习总结

教材学习内容总结

第六章知识点总结html

1-继承共同行为:若是在程序设计上存在着重复,那就须要修改,能够吧相同的程序代码提高(pull up)为父类。extends关键字表示新建的类会扩充原有的类的行为。java

2-多态与is-a:子类只能继承一个父类,而且子类与父类之间有一种is-a的关系,让不是一种的类扮演另外一种类须要加上相似于 强制类型转换的语法。-使用单一接口操做多种类型的对象就是多态,我的的理解就是用一种父类来控制许多的子类。程序员

3-从新定义行为:在继承父类以后,定义与父类中相同的方法部署,但执行内容不一样,这称为从新定义(Override)。在从新定义父类中某个方法的时候,子类必须撰写与父类方法中相同的签署,加上@Override可用来检查该方法是否真的从新定义了父类中的某个方法,防止打错字,不然就会发生错误。算法

4-抽象方法、抽象类:若是某个方法区块中真的没有任何程序代码操做,可使用abstract标示该方法public abstract void fight,定义不完整的类就不能用来生成实例,内含抽象方法的类也必定要定义为不完整的抽象类,子类继承抽象类,对于抽象方法,一种是继续标示其为抽象类,另外一种就是操做抽象方法数组

5-protected成员:被声明为protected的成员,相同包中的类能够直接存取,不一样包中的类能够在继承后的子类直接存取.所以要记住java的3(4)个权限关键词及其对应的权限范围,详见P172表6.1ide

6-从新定义的细节:若是想取得父类中的方法定义,能够在调用方法前加上super关键字,从新定义父类中的方法在子类中权限只能扩大不能缩小,在jdk5以后返回类型也能够是父类中方法返回类型的子类函数

7-再看构造函数:在建立子类实例后,会先进行父类定义的初始流程,在进行子类定义的初始流程,若是子类构造父类函数中没有指定执行父类中哪一个构造函数,默认会调用父类中无参数构造函数若是父类中定义了构造函数,子类构造函数时就要注意调用父类中的哪一个函数学习

8-再看final关键字:若是在class前加上final关键字,这就表示这个类是最后一个了,不会再有子类,也就是不能被继承。动画

9-java.lang.object:任何类的最上层父类必定就是java.lang.object,所以Object数组能够来收集各类类型的对象。instanceof:左操做数为对象,右操做数是类,能够用来判断对象是否由某个类建立this

10-垃圾收集:对于再也不有用的对象,JVM的垃圾收集器会将其释放。不一样的需求会有不一样的垃圾收集算法。

抽象类:若是还有些方面没有肯定,能够调用抽象方法,等到平台肯定后,再对代码进行符合这个平台的完善就行。

第七章知识点总结

1-接口定义行为:对于定义行为,可使用interace关键字定义,类要操做接口,必须使用implements关键字,对接口中定义的方法有两种操做方式,一是操做接口中定义的方法,二是再度将该方法表示为abstract。操做接口表示“拥有行为”,再也不是“是一种”的关系。

2-行为的多态:与继承相同,也可让一个对象强行扮演(cast)某种行为,与多态相同,只要是操做同一个接口的类均可以拥有接口的行为,可维护型也同时获得了较大的提升。

3-解决需求变化:在java中类能够操做两个以上的类,能够同时继承某个类并操做某些接口;于此同时,java中接口能够继承自另外一个接口,也就是继承父接口行为,再在子接口中额外定义行为。

4-接口中的方法没有操做时,必定得是公开而且抽象。 在interface接口中经常能够定义枚举常数(例:public static final int),实际上,在interface接口中也只能定义public static final的枚举常数,而且必定要使用=指定值,不然就会编译错误。我的感受枚举常数在表达意思上更清楚一些,便于程序员读懂程序。接口也能够继承接口。

5-匿名内部类:主要是在临时继承某个类或操做某个接口并创建实例的需求(例:Some some=new Some(){};)

6-使用enum枚举常数:public enum Action{},实际上enum定义了特殊的类,enum中的元素也就是枚举常数。

教材学习中的问题和解决过程 课后练习:

Ch6:A D D AC DC C B A D

Ch7:A B A B B A D A A A

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

定义ArrayList类,不限长度地收集对象

    import java.util.Arrays;

public class ArrayList { private Object[] list; private int next;

public ArrayList(int capacity)
{
    list=new Object[capacity];
}

public ArrayList() 
{
    this(16);
}

public void add(Object o) 
{
    if(next==list.length) 
    {
        list=Arrays.copyOf(list, list.length*2);
    }
    list[next++]=o;
}
public Object get(int index) 
{
    return list[index];
}

public int size() 
{
    return next;
}

}     

设计一款RPG游戏的部分代码

    

public class PRG{ public static void main(String[] args){ demoSwordMan(); demoMagician(); }

static void demoSwordsMan(){
    SwordsMan swordsMan = new SwordsMan();
    swordsMan.setname("Justin");
    swordsMan.setlevel(1);
    swordsMan.setblood(200);
    System.out.printf("剑士:(%s,%d,%d)%n",swordsMan.getName(),swordsMan.getLevel(),swordsMan.getBlood());

}
static coid demoMagician(){
    Magician magician =new Magician();
    magician.setname("Monica");
    magician.setLevel(1);
    magician.setBlood(100);
    System.out.printf("魔法师:(%s,%d,%d)%n",magician.getName(),magician.getLevel(),magician.getBlood());
}

}     

关于Override描述 Override也称函数覆盖,重写,复写 父类中的私有方法不能够被覆盖 在子类覆盖方法中,继续使用被覆盖的方法能够经过super.函数名获取 覆盖时,子类方法权限必定不能小于父类方法权限 当子类须要父类的功能,而功能主题子类有本身特有内容时,能够override父类中的方法,这样,即沿袭了父类的功能,又定义了子类特有的内容

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

关于将枚举类用在了switch语句中的问题

```

import static java.lang.System.out;

public class EnumGame {

public static void main(String[] args) {

    play(EnumAction.RIGHT);

    play(EnumAction.UP);

}
public static void play(EnumAction action) {
    switch (action) {
        case STOP:
            out.println("播放中止动画");
            break;
        case RIGHT:
            out.println("播放向右动画");
            break;
        case LEFT:
            out.println("播放向左动画");
            break;
        case UP:
            out.println("播放向上动画");
            break;
        case DOWN:
            out.println("播放向下动画");
            break;
    }
}

} ```

使用interface来定义抽象的行为与外观,如接口中的方法可声明为public abstract

```

public interface Action{

public static final int STOP=0;
public static final int RIGHT=1;
public static final int LEFT=2;
public static final int UP=3;
public static final int DOWN=4;

}

import static java.lang.System.out;

public class Game{

public static void main(String[] args){
    play(Action.RIGHT);
    play(Action.UP);
}
public static void play(int action){
    switch(action){
        case Action.STOP:
        out.println("bofangtingzhidonghua");
        break;
        case Action.RIGHT:
        out.println("bofangxiangyoudonghua");
        break;
        case Action.LEFT:
        out.println("bofangxiangzuodonghua");
        break;
        case Action.UP:
        out.println("bofangxiangshangdonghua");
        break;
        case Action.DOWN:
        out.println("bofangxiangxiadonghua");
        break;
        default:
        out.println("buzhichicidongzuo");
    }
}

} ```

本周代码托管截图

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

在忙碌中完成了这周的学习,这周的学习围绕着继承和接口,两者类似而不相同,学习内容较为抽象,看了老师分享的毕向东老师的视频,我我的感受有些抽象的东西仍是要看视频,视频中表达的方式和接受的深度要更高一点,也慢慢地感觉到了java的魅力。语言问题仍是要多练习多练习!

学习进度条

  代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 3000行 20 300  
第四周 250/350 1/3 21/30  

 

相关文章
相关标签/搜索