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 |