20155317 王新玮 2006-2007-2 《Java程序设计》第4周学习总结
教材学习内容总结
第六章
-
继承共同行为
-
多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承单独的那个类即可。
-
多个类可以称为子类,单独这个类称为父类或者超类。
-
子类可以直接访问父类中的非私有的属性和行为。
-
通过extends 关键字让类与类之间产生继承关系。
-
多态与is-a
子类只能继承一个父类,并且子类与父类之间有一种is-a的关系,让不是一种的类扮演另一种类需要加上类似于 强制类型转换的语法。 使用单一接口操作多种类型的对象就是多态,个人的理解就是用一种父类来控制许多的子类。
-
重新定义行为
在继承父类之后,定义与父类中相同的方法部署,但执行内容不同,这称为重新定义(Override)。在重新定义父类中某个方法的时候,子类必须撰写与父类方法中相同的签署,加上 @Override可用来检查该方法是否真的重新定义了父类中的某个方法,防止打错字,否则就会发生错误。
-
抽象方法、抽象类
-
抽象类:Java中可以定义没有方法体的方法,该方法的具体实现由子类完成,该方法称为抽象方法,包含抽象方法的类就是抽象类
-
抽象方法的由来:多个对象都具备相同的功能,但是功能具体内容有所不同,那么在抽取过程中,只抽取了功能定义,并未抽取功能主体,那么只有功能声明,没有功能主体的方法称为抽象方法。
-
抽象类和抽象方法必须用abstract关键字来修饰。
- 关于继承的代码如下:
-
1 public class RPG1 { 2 public static void main (String[] args) { 3 demoSwordsMan(); 4 demoMagician(); } 5 static void demoSwordsMan() { 6 SwordsMan1 swordsMan1 = new SwordsMan1(); swordsMan1.setName("Justin"); 7 swordsMan1.setLevel(1); 8 swordsMan1.setBlood(200); 9 System.out.printf("剑士 : (%s, %d, %d)%n",swordsMan1.getName(), swordsMan1.getLevel(),swordsMan1.getBlood()); } 10 static void demoMagician() { 11 Magician1 magician = new Magician1(); magician.setName("Moinca"); 12 magician.setLevel(1); magician.setBlood(100); System.out.printf("魔法师 :(%s ,%d ,%d)%n",magician.getName(), magician.getLevel(),magician.getBlood()); } }
第七章
-
接口: 可以理解为一种特殊的类,里面全部是由全局常量(static final)和公共的抽象方法所组成。
-
接口的定义格式:
- 接口的数据成员,只允许被public, static, final修饰。 接口的方法成员,只允许被public, abstract修饰。 '''Interface 接口名称{ }''' 接口中的数据成员都为static final类型,必须进行初始化,且接口的数据成员的值不能被修改,允许省略static, final关键字。
- 接口中的方法必须是“抽象方法”,不能有方法体,允许省略public及abstract关键字
- 接口的实现
- 接口不能用new运算符直接产生对象,必须利用其特性设计新的类,再用新类来创建对象 与抽象类一样,接口要使用也必须通过子类,子类通过implements关键字实现接口。 实现格式: class 子类名称 implements 接口A, 接口B,….{ //子类成员声明 } 接口的使用必须通过子类,子类必须覆写全部抽象方法。一个子类虽然只能继承于一个父类,但可以同时实现多个接口。
4.接口的继承
-
接口不能继承一个抽象类,却可以通过extends同时继承于多个接口。
-
public abstract class base {……} interface B {……} interface C{……} interface A extends base{……} //错误 interface A extends B, C{ ……} //正确
- 接口与继承的区别:
- 定义: 以abstract声明,抽象方法可有可无。
以interface声明,由静态常量和抽象方法组成。
-
组成:构造方法、抽象方法、普通方法、常量、变量、静态常量、抽象方法
-
使用:子类继承抽象类(extends)、子类实现接口(implements)
-
关系
-
抽象类可以实现多个接口
-
接口不能继承抽象类,但允许继承多个接口
-
对象都通过对象的多态性产生实例化对象
-
局限抽象类有单继承的局限但是接口可以实现多重继承
-
选择 如果抽象类和接口都可以使用的话,优先使用接口,可以避免单继承的局限
- 多态
- 是指不同类型的对象可以响应相同的消息,从相同的基类派生出来的多个类型可被当作同一种类型对待,可对这些不同的类型进行同样的处理,由于多态性,这些不同派生类对象响应同一方法时的行为是有所差别的 例如:所有的Object类的对象都响应toString()方法。
7.多态性在java中主要有以下两种体现:
- 方法的重载与覆写 对象的多态性
教材学习中的问题和解决过程
- 理解public、protect、privite类的关系
- public是最大的类,几乎所有的情况下都可以使用,在一般的继承中,我们一般选用protect类,这一类的父类是不可改的,我的理解中,这一种实际上是做了一个模板,而没有给这个模板实际的去操作什么,而真正操作的是用它定义的子类。在privite类中,故名思意。也就是说,这一类的对象只能在自己这个类中使用,若要是要调用它的值则必须用函数去调用,不能通过一般的调用方法。
代码调试中的问题和解决过程
-
1 public class RPG1 { 2 public static void main (String[] args) { 3 demoSwordsMan(); 4 demoMagician(); } 5 static void demoSwordsMan() { 6 SwordsMan1 swordsMan1 = new SwordsMan1(); swordsMan1.setName("Justin"); 7 swordsMan1.setLevel(1); 8 swordsMan1.setBlood(200); 9 System.out.printf("剑士 : (%s, %d, %d)%n",swordsMan1.getName(), swordsMan1.getLevel(),swordsMan1.getBlood()); } 10 static void demoMagician() { 11 Magician1 magician = new Magician1(); magician.setName("Moinca"); 12 magician.setLevel(1); magician.setBlood(100); System.out.printf("魔法师 :(%s ,%d ,%d)%n",magician.getName(), magician.getLevel(),magician.getBlood()); } }
在代码的调试过程中,我将public这些关键词反复的去改用别的关键词,来发现不同,在继承过程中,最好不要用public,虽然可以,但是比较容易出错误。
代码托管
- 代码提交过程截图:
- 代码量截图:
上周考试错题总结
- “30”转化为byte类型的30的语句是(Byte.parseByte(“30”);)。
- public void someMethod(int i)和public int someMethod()是方法重载
- Java中方法内可以定义类。
- 1.Linux Bash中,(grep )命令可以进行全文搜索。
其他(感悟、思考等,可选)
xxx xxx
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 18/150 | 2/2 | 20/20 | |
第二周 | 201/200 | 2/4 | 18/38 | |
第三周 | 672/1000 | 3/7 | 22/60 | |
第四周 | 297/1300 | 2/9 | 30/90 |
尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。 耗时估计的公式 :Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。
-
计划学习时间:XX小时
-
实际学习时间:XX小时
-
改进情况:
参考资料