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

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

教材学习内容总结

第六章 继承与多态

  • 继承:避免多个类间重复定义共同行为。

把相同代码提升为父类

运用extends关键字的子类会继承扩充父类行为

多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承单独的那个类即可。  

多个类可以称为子类,单独这个类称为父类或者超类。  

子类可以直接访问父类中的非私有的属性和行为。  

public class Game1Role {
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;
}
}

通过extends 关键字让类与类之间产生继承关系。

public class Game1SwordsMan extends Game1Role {
public void fight(){
System.out.println("挥剑攻击");
}
}
  • 多态:单一接口操作多种类型的对象。

  • is-a关系定义:子类只能继承一个父类,“是一种”关系。

     public class RPG {
     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(swordsMan);
    
     }
    
     static void showBlood(Role role) {
     System.out.printf("%s 血量 %d%n", role.getName(), role.getBlood());
     }
     }
    

在showBlood()方法中,通过Role类型既可以操作SwordsMan对象,也可以操作Magician对象,这就是多态。

  • 重新定义:在继承父类之后,定义与父类中相同的方法部署,但执行内容不同。

     public class RPG3
     {
     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);
     
     drawFight(swordsMan);
     drawFight(magician);
     
     }
     static void drawFight(Role role)
     {
     System.out.print(role.getName());
     role.fight();
     }
     }
    
  • 抽象方法:如果某方法区块中真的没有任何程序代码操作,可以使用abstract表示该方法为抽象方法,不用撰写{ }区块,直接“;”结束即可。

    含有抽象方法的类,一定要在class前标示abstract;子类如果继承抽象类,意识继续标示abstract,另一种就是操作方法。

  • 继承语法的细节

    super关键字表示父类的意思。this变量代表对象本身。即super()和this()类似,区别是,super从子类中调用父类的构造方法,this()在同一类内调用其它方法。

    调用super()必须写在子类构造方法的第一行,否则编译不通过。每个子类构造方法的第一条语句,都是隐含地调用super()。

     public class OceanWorld1Anemonefish extends OceanWorld1Fish {
     public OceanWorld1Anemonefish(String name) {
     super(name);
     }
     @Override
     public void swim() {
     System.out.printf("小丑鱼 %s 游泳%n", name);
     }
     }
    

第七章 接口与多态

  • 接口:可以理解为一种特殊的类,里面全部是由全局常量(static final)和公共的抽象方法所组成。

  • 接口的定义格式:接口的数据成员,只允许被public, static, final修饰。
    接口的方法成员,只允许被public, abstract修饰。

    接口中的数据成员都为static final类型,必须进行初始化,且接口的数据成员的值不能被修改,允许省略static, final关键字。接口中的方法必须是“抽象方法”,不能有方法体,允许省略public及abstract关键字

  • 接口的实现:
    接口不能用new运算符直接产生对象,必须利用其特性设计新的类,再用新类来创建对象
    与抽象类一样,接口要使用也必须通过子类,子类通过implements关键字实现接口。

  • 接口的继承:接口不能继承一个抽象类,却可以通过extends同时继承于多个接口。

     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;
     }
     }
     }
    

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

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

本周代码托管截图

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

 java学习是一条长久的道路,有坎坷,也有解决问题的喜悦。这一周主要学习了六七章节的内容,首先主要是一个RPG、SwordsMan这两个程序,但其不仅仅是一个程序,是多个程序继承在一起才能运行,我们正一步一步在添砖加瓦,使程序日趋完善,功能越发强大。这周的学习让我体会到java语言功能的多样,操作接口、继承类,有时相同的问题可以有不同的方法解决,就需要多学习,选择效率高、准确度高的方法来解决问题。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 200/200 2/2 20/20
第二周 200/400 1/3 18/38
第三周 200/600 1/4 22/60
第四周 200/800 1/5 30/90

参考资料

posted @ 2016-03-27 22:56  20145101王闰开  阅读(239)  评论(2编辑  收藏  举报