20145310 《Java程序设计》第4周学习总结
20145310 《Java程序设计》第4周学习总结
教材学习内容总结
本周主要进行第五章和第六章的学习。
第六章 继承与多态
子类(Inherit)继承父类,避免重复的行为定义,不过并非为了避免重复定义行为就是用继承,滥用继承而导致程序维护上的问题时有所闻。
书中从一款RPG游戏入手。
继承作为面向对象的第二大特征,基本上就是避免多个类间重复定义共同行为。继承也符合DRY(Don't Repeat Yourself)原则。通过extends 关键字让类与类之间产生继承关系。
将书中的代码提升(Pull Up)为父类
public class Role3
{
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;
}
}
public class Magician3 extends Role3
{
public void fight3()
{
System.out.println("魔法攻击");
}
public void cure()
{
System.out.println("魔法治疗");
}
}
magician继承Role的行为,再扩充了Role原本没有的fight()与cure()行为。
从以下的程序可以看出确实有继承。
public class RPG1
{
public static void main (String[] args)
{
demoSwordsMan();
demoMagician();
}
static void demoSwordsMan()
{
SwordsMan1 swordsMan1 = new SwordsMan1();
swordsMan1.setName("Justin");
swordsMan1.setLevel(1);
swordsMan1.setBlood(200);
System.out.printf("剑士 : (%s, %d, %d)%n",swordsMan1.getName(),
swordsMan1.getLevel(),swordsMan1.getBlood());
}
static void demoMagician()
{
Magician1 magician = new Magician1();
magician.setName("Moinca");
magician.setLevel(1);
magician.setBlood(100);
System.out.printf("魔法师 :(%s ,%d ,%d)%n",magician.getName(),
magician.getLevel(),magician.getBlood());
}
}
程序运行结果图片:
在Java中,子类只能继承一个父类;
is-a:因为子类继承了父类,所以子类是一种父类。
多态:要开始理解多态,必须要知道操作的对象是“哪一种”东西。
多态就是使用单一接口操作多种类型的对象。即可以通过Role类型操作SwordMan对象,也可以通过Role类型操作Magician对象。
Java中有抽象方法的类一定是抽象类,但抽象类中的方法不一定都是抽象方法
继承语法细节:在Java中有public、protected、private三个权限关键字,但实际上有四个权限范围:public/package/protected/private
图片:
依权限小至大来区分。如果一开始不知道使用那个权限,就先使用private,以后视需求再放开权限。
final可以指定变量值不再改变,在class前加上final,意思是这个类是最后一个类,不会再有子类,即不能被继承。限定方法为final表示最后一次定义该方法,子类不能重新定义。在Java中子类只能继承一个父类,没有使用extends关键字指定继承的类时,一定是继承java.lang.Object。
第七章 接口与多态
使用 interface 定义接口:
public interface Swimmer
{
public abstract void swim();
}
使用 implements 操作接口。
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();
}
类要操作接口,必须使用implements关键字。操作某接口时,对于接口的定义有两种操作方式:一是操作接口中定义的方法,二是再次将该方法标识为abstract。
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);
}
}
public class Submarine implements Swimmer
{
private String name;
public Submarine(String name){
this.name=name;
}
public String getName()
{
return name;
}
@Override
public void swim(){
System.out.printf("潜水艇 %s 潜行%n",name);
}
}
public class Ocean
{
public static void main(String[] args)
{
doSwim(new Anemonefish("尼莫"));
doSwim(new Shark("兰尼"));
doSwim(new Human("贾斯汀"));
doSwim(new Submarine("黄色一号"));
}
static void doSwim(Swimmer swimmer)
{
swimmer.swim();
}
}
程序运行结果如下:
接口语法细节:接口中的public abstract可以省略
接中可以使用extends继承接口,并且可以继承多个接口
在接口中枚举常数,一定要使用 = 指定值,否则编译错误。
在interface中,可以定义常数。
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) //声明为action类型
{
switch(action)
{
case Action.STOP:
out.println("播放停止动画"); //也就是Action.STOP
break;
case Action.RIGHT:
out.println("播放向右动画"); //也就是Action.RIGHT
break;
case Action.LEFT:
out.println("播放向左动画"); //也就是Action.LEFT
break;
case Action.UP:
out.println("播放向上动画"); //也就是Action.UP
break;
case Action.DOWN:
out.println("播放向下动画"); //也就是Action.DOWN
break;
}
}
}
这个代码中,play()方法中的action参数声明为Action类型,所以只接受Action的实例。
接口可以继承别的接口,也可以同时继承两个以上的接口。
代码调试中的问题和解决过程
这周学习的两章不但代码比较多,而且难度也比较大,不能很好地消化。
首先出现了大量的生词,很难记忆,所以学习java也要有一定的英语基础啊。
在调试的过程中又出现了GBK的问题,这个问题搞得很头疼,说明还是编码的问题。并且使用EditPlus编写代码编译运行的时候也较为不便,决定从下周开始使用IDEA。
有很多东西看书上说的并不是很清楚,还要多看看视频才能搞清楚。
其他(感悟、思考等,可选)
每周两章学习内容很多,其实并不能很好地理解,但敲代码总是有好处的。学习java要投入大量的时间,才能学好。同时还有一些新概念,新知识,以前没有接触过的类型,也要用新的思路去理解。
代码托管截图:
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 100/100 | 2/2 | 10/10 | 初步认识java |
第二周 | 150/250 | 1/3 | 12/22 | 掌握Java基础语法 |
第三周 | 537/787 | 2/4 | 20/42 | 认识对象,对象封装 |
第三周 | 500/1287 | 1/5 | 20/62 | 继承与多态,接口与多态 |
参考资料
20145310 《Java程序设计》第4周学习总结的更多相关文章
- 20145213《Java程序设计》第九周学习总结
20145213<Java程序设计>第九周学习总结 教材学习总结 "五一"假期过得太快,就像龙卷风.没有一点点防备,就与Java博客撞个满怀.在这个普天同庆的节日里,根 ...
- 20145213《Java程序设计》第二周学习总结
20145213<Java程序设计>第二周学习总结 教材学习内容总结 本周娄老师给的任务是学习教材的第三章--基础语法.其实我觉得还蛮轻松的,因为在翻开厚重的书本,一股熟悉的气息扑面而来, ...
- 20145213《Java程序设计》第一周学习总结
20145213<Java程序设计>第一周学习总结 教材学习内容总结 期待了一个寒假,终于见识到了神秘的娄老师和他的Java课.虽说算不上金风玉露一相逢,没有胜却人间无数也是情理之中,但娄 ...
- 21045308刘昊阳 《Java程序设计》第九周学习总结
21045308刘昊阳 <Java程序设计>第九周学习总结 教材学习内容总结 第16章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 数据库本身是个独立运行的应用程序 撰 ...
- 20145330孙文馨 《Java程序设计》第一周学习总结
20145330孙文馨 <Java程序设计>第一周学习总结 教材学习内容总结 刚开始拿到这么厚一本书说没有压力是不可能的,开始从头看觉得很陌生进入不了状态,就稍微会有一点焦虑的感觉.于是就 ...
- 20145337 《Java程序设计》第九周学习总结
20145337 <Java程序设计>第九周学习总结 教材学习内容总结 数据库本身是个独立运行的应用程序 撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的增删查找 JDBC可以 ...
- 20145337 《Java程序设计》第二周学习总结
20145337 <Java程序设计>第二周学习总结 教材学习内容总结 Java可分基本类型与类类型: 基本类型分整数(short.int.long).字节(byte).浮点数(float ...
- 20145218《Java程序设计》第一周学习总结
20145218 <Java程序设计>第一周学习总结 教材学习内容总结 今天下午看了Java学习的视频,感觉很是新奇,之前觉得Java学起来是艰难枯燥的,但通过第一章的学习觉得如果自己可以 ...
- 《Java程序设计》第九周学习总结
20145224 <Java程序设计>第九周学习总结 第十六章 整合数据库 JDBC入门 ·数据库本身是个独立运行的应用程序 ·撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的 ...
- 《Java程序设计》第二周学习总结
20145224陈颢文<Java程序设计>第二周学习总结 教材学习内容总结 一.类型.变量与运算符 1.类型 整数: 可细分为为short整数(占2字节),int整数(占4字节),long ...
随机推荐
- java的Enumeration转list
java的Enumeration转list Enumeration<String> attrs = getAttrNames();// while(attrs.hasMoreElement ...
- js如何遍历并取出对象的属性名?
js如何遍历并取出对象的属性名? dataObj = {name : su,age : 26,height : 18cm }; for(var st in dataObj) {console.dir( ...
- angular4 checkbox复选框的全选,反选及个别选择
<label><input type="checkbox" name="" [(ngModel)]="master"> ...
- uva656 Optimal Programs
Optimal Programs As you know, writing programs is often far from being easy. Things become even hard ...
- php composer,update-ca-trust
安装 ComposerComposer 需要 PHP 5.3.2+ 才能运行. $ curl -sS https://getcomposer.org/installer | php这个命令会将 com ...
- Linux/Mac里复制终端Session(像SecureCRT一样)
在你的登录账户下的.ssh文件夹新建一个文件:config cd ~/.ssh config的文件中,内容为: host * ControlMaster auto ControlPath ~/.ssh ...
- leadecode 2 Add Two Numbers
package leadcode; /** * 2. Add Two Numbers * Medium * 4067 * 953 * * * You are given two non-empty l ...
- Spring整合JUnit4进行AOP单元测试的时候,报:"C:\Program Files\Java\jdk1.8.0_191\bin\java.exe" -ea -Didea.test.cyclic.buffer.size=1048576 "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2018.3\lib\idea_rt.jar=64
错误代码 "C:\Program Files\Java\jdk1.8.0_191\bin\java.exe" -ea -Didea.test.cyclic.buffer.size= ...
- Incorrect key file for table ' '; try to repair it
场景:为有150W的数据表增加字段时,报错 解决:在my.ini配置临时目录configure tmpdir. Where MySQL Stores Temporary Files
- 【云安全与同态加密_调研分析(3)】国内云安全组织及标准——By Me
◆3. 国内云安全组织及标准◆ ◆云安全标准机构(主要的)◆ ◆标准机构介绍◆ ◆相关标准制定◆ ◆建立的相关模型参考◆ ◆备注(其他参考信息)◆ ★中国通信标准化协会(CCSA) ●组织简介:200 ...