20145235 《Java程序设计》第4周学习总结

代码托管截图

教材学习内容总结

继承

•继承:继承基本上就是避免多个类间重复定义共同行为。 我理解的就是:在编写程序的过程中可能会出现部分代码重复的现象,把重复的部分单独定义为一类(父类),在其他代码中(子类)直接继承,这样子类可直接使用父类的方法,子类的对象也可以使用父类的方法,同时避免了大段代码的重复出现的问题。 •扩充:关键字 extend

public class RPG
{
    public static void main (String[] args)
    {
        demoSwordsMan();
        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 void demoMagician()
    {
        Magician magician = new Magician();
        magician.setName("Moinca");
        magician.setLevel(1);
        magician.setBlood(100);
        System.out.printf("魔法师:(%s,%d,%d)%n",magician.getName(),
                magician.getLevel(),magician.getBlood());
        
    }
}
public class Magician extends Role
{
    public void fight()
    {
        System.out.println("魔法攻击");
    }

    public void cure()
    {
        System.out.println("魔法治疗");
    }   
} 

  

public class Role{
    private String name;
    private int level;
    private int blood;
    
    public int getBlood()
    {
        return blood;
    }
    public void setBlood(int blood)
    {
        this.blood = blood;
    }
    public int getLevel()
    {
        return level;       
    }
    public void setLevel(int level)
    {
        this.level = level;
    }
    public String getName()
    {
        return name;
    }
    public void setName(String name)
    {
        this.name = name;
    }

}

  

多态与is-a

Java只支持单继承,不支持多继承。一个类只能有一个父类,不可以有多个父类。

Java支持多层继承(继承体系) 。

定义继承需要注意:类与类之间要有所属( " is a " )关系,以前面范例来说,SwordsMan继承了Role,所以SwordsMan is a Role。

代码如下:

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("Monica");
        magician.setLevel(1);
        magician.setBlood(100);
        
        showBlood(swordsMan);
        showBlood(magician);
        
    }
    static void showBlood(Role role)
    {
        System.out.printf("%s 血量 %d%n",role.getName(),role.getBlood());
    }
}

  

重新定义

在继承父类之后,定义与父类中相同的方法部署,但执行内容不同,这称为重新定义。因为对父类中已定义的方法执行不满意,所以在子类中重新定义执行。

抽象方法、抽象类

抽象类:Java中可以定义没有方法体的方法,该方法的具体实现由子类完成,该方法称为抽象方法,包含抽象方法的类就是抽象类。 抽象方法的由来:多个对象都具备相同的功能,但是功能具体内容有所不同,那么在抽取过程中,只抽取了功能定义,并未抽取功能主体,那么只有功能声明,没有功能主体的方法称为抽象方法。 抽象类和抽象方法必须用abstract关键字来修饰。

final关键字

如果class前使用了final关键字定义,那么表示这个类是最后一个了,不会再有子类,也就不能被继承。定义方法时,也可以是限定该方法为final,这表示最后一次定义方法了,也就是子类不可以重新定义final方法。final可以修饰类,方法,变量。final修饰的类不可以被继承。final修饰的方法不可以被覆盖。 final修饰的变量是一个常量,只能被赋值一次。内部类只能访问被final修饰的局部变量

接口定义行为

类要操作接口,必须使用implements关键字。操作某接口时,对接口中的定义的方法有两种处理方式,一是操作接口中定义的方法,二是再度将该方法标示为abstract。例如:

public abstract class Fish implements Swimmer {
protected String name;
public Fish(String name){
this.name = name;
}
public String getName(){
return name;
}
@Override
public abstract void swim();
}

  

对于“定义行为”可以使用interface关键字定义,接口中的方法不能操作,直接标示为abstract,而且一定是public。 类可以操作两个以上的类,也就是拥有两个以上的行为。类可以同时继承某个类,并操作某些接口,接口可以继承自另一个接口,也就是继承父接口行为,再在子接口中额外定义行为。

public class Human implements Swimmer {
private String name;
public Human(String name){
this.name=name;
}
public String getName()
{
return name;
}


@Override
public void swim();{
System.out.printf("人类 %s 游泳%n",name);
}
}

  

接口语法细节

使用interface来定义抽象的行为外观,方法要声明为public abstract,无须且不能有操作。为了方便,也可以省略public abstract,编译程序会协助补齐。可以使用接口枚举常数,只能定义为public static final,为了方便,也可以省略public static final。

接口可以继承别的接口,也可以同时继承两个以上的接口,也是使用extends关键字。

enum语法可用于定义枚举常数,enum实际上定义了类,而enum中列举的常数实际上是public static final,无法撰写程序直接实例化枚举类型,因为构造函数权限设定为private,只有类中才可以实例化。

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

 

 

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

刚开始这周的任务时,一看到什么“魔法师”,“剑士”……感觉好惊讶,才学Java这么短时间,难道我就要编程游戏了吗!带着这种惊讶我开始了这周学习,然而依我现在的这种菜鸟水平,编程游戏简直是天方夜谈啊。这周一下子觉得时间好紧张,自己想做的事情太多了,想学JAVA,也想做做自己的事情,准备计算机二级,学一学英语,练练字,看看书,运动运动,去感受感受春天的气息。然而很多还是没有时间去做啊。这周感觉java学习任务节奏好快啊,其实前面的有些知识还没好好消化就马上接着新的一周学习。希望这周会变好。  

posted @ 2016-03-27 22:46  20145235李涛  阅读(218)  评论(1编辑  收藏  举报