20145103《java程序设计》第4周学习总结
20145103 《Java程序设计》第4周学习总结
教材学习内容总结
继承
继承共同行为
·继承基本上就是避免多个类间重复定义共同行为。
·继承的三个好处:减少代码冗余;维护变得简单;扩展变得容易。
·构造方法不能被继承。
·代码如下:
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());
}
}
多态与is-a
·is-a代表的是类之间的继承关系。中文称为“是一种”关系。
·使用是一种原则,就可以判断何时编译成功,何时编译失败。
·编译程序会检查父子类间的“是一种”关系.
·定义继承需要注意:类与类之间要有是一种(is-a)关系,比如SwordsMan继承了Role,所以SwordsMan is a Role。
·代码如下:
public class RPG3
{
public static void main(String[] args)
{
SwordsMan3 swordsMan3 = new SwordsMan3();
swordsMan3.setName("Justin");
swordsMan3.setLevel(1);
swordsMan3.setBlood(200);
Magician3 magician3 = new Magician3();
magician3.setName("Monica");
magician3.setLevel(1);
magician3.setBlood(100);
drawFight(swordsMan3);
drawFight(magician3);
}
static void drawFight(Role3 role)
{
System.out.print(role.getName());
role.fight3();
}
}
继承语法
1、protected 的使用:被声明为protected的成员,相同包中的类可以直接存取,不同包中的类可以在继承后的子类直接存取。
2、super 关键字的使用:
如果想取得父类中的方法定义,可以在调用方法前,加上super关键字,使用super关键字调用的父类方法,不能定义为private。
3、java.lang.Object
在Java中,最上层的父类就是java.lang.Object。
第七章
7.1接口
7.1.1-接口定义行为:对于定义行为,可以使用interace关键字定义,类要操作接口,必须使用implements关键字,对接口中定义的方法有两种操作方式,一是操作接口中定义的方法,二是再度将该方法表示为abstract。操作接口表示“拥有行为”,不再是“是一种”的关系。
7.1.2-行为的多态:与继承相同,也可以让一个对象强行扮演(cast)某种行为,与多态相同,只要是操作同一个接口的类都可以拥有接口的行为,可维护型也同时得到了较大的提高。
7.1.3-解决需求变化:在java中类可以操作两个以上的类,可以同时继承某个类并操作某些接口;于此同时,java中接口可以继承自另一个接口,也就是继承父接口行为,再在子接口中额外定义行为。
7.2接口语法细节
7.2.1-接口中的方法没有操作时,一定得是公开并且抽象。
在interface接口中常常可以定义枚举常数(例:public static final int),实际上,在interface接口中也只能定义public static final的枚举常数,并且一定要使用=指定值,否则就会编译错误。个人感觉枚举常数在表达意思上更清楚一些,便于程序员读懂程序。接口也可以继承接口。
7.2.2-匿名内部类:主要是在临时继承某个类或操作某个接口并建立实例的需求(例:Some some=new Some(){};)
7.2.3-使用enum枚举常数:public enum Action{},实际上enum定义了特殊的类,enum中的元素也就是枚举常数。
教材学习中的问题和解决过程
代码托管截图:
代码调试中的问题和解决过程
抽象类使用的两种方式还没能完全地理解,再有就是在第七章有一个Interface的程序,虽然按照书上的代码敲了一遍并且编译运行成功了,但感觉这一串代码还是有些难以理解,其中的调用比较多,也比较复杂。
我自己感觉继承和接口其实是差不多的,一个是“是一种”的关系,另外一个是一种“拥有行为"的关系,一个是继承,一个是操作接口,相似而不相同。
其他(感悟、思考等,可选)
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 2000行 | 16篇 | 400小时 | |
第一周 | 200/200 | 1/1 | 20/20 | |
第二周 | 100/300 | 1/2 | 20/40 | |
第三周 | 200/500 | 1/3 | 30/70 | |
第四周 | 200/700 | 1/4 | 30/1000 |