您的位置:首页 > 编程语言 > Java开发

20145204 《Java程序设计》第四周学习总结

2016-03-27 22:08 239 查看

20145204 《Java程序设计》第四周学习总结

教材学习内容总结

继承

什么时候使用继承?
当多个类中出现重复定义的行为(即多个类中出现重复的代码)时,就把相同的程序代码提成为父类。

使用继承的意义

提高了代码的复用性。

使类和类之间产生关系,从而产生多态 。

注意

当类与类之间有所属关系时才使用继承。不能因为要使用别的类中的功能而随意使用继承。

子类只能继承一个父亲。

多态与is-a
在继承中子类和父类的“是一种”关系。

子类是一种父类:

SwordsMan swordsman=new SwordsMan;

Role role=new SwordsMan();

在java中有且仅有一种继承父类

重新定义行为
如果子类和父类的定义函数名相同会出现函数覆盖的情况。

多个类中功能相同但是功能主体不同,也可以抽取在父类中。

抽象方法、抽象类
上述在父类中的fight()函数没有撰写程序代码,用abstract关键词标识,
public  abstract class roleplay
表示定义不完整的类,就不能建立实例。

子类必须覆盖父类中的所有抽象方法,才能建立子类调用。

protected成员
protected与public、private类似都是权限关键字。如果成员被定义为protected的话在相同的包中可以直接存取。

super关键字
修改子类中已经存在的内容时,可以在调用方法前加上super关键字。

在使用super关键字调用父类方法,不能定义为private(只限定在类内中使用)

接口

为什么会用到接口
我们在第六章中学习了继承,一个类继承另一个类就可以拥有该类中的一些方法,但是类的继承有一个“是一种”的属性,你继承哪个就是一种该类,可是有时候我们仅仅想要拥有类中方法但是与该类并没有从属关系,此时就用到接口。

接口使用
在java中会用到interface关键字定义接口。标准定义:

public interface  role{
public abstract void roleplay ();

}

我们注意到该方法只定义了一个接口,但是并没有具体操作方法。如果想要拥有role中的行为必须操作接口。

我们用关键字implements操作接口。

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

关于子类继承抽象类有些不太清楚,课本上说继续标识子类是一种抽象类或者说操作抽象方法。关于如何操作抽象方法小小的做了一个尝试:

abstract class  role{
abstract void speak();

}
class student extends role {
void speak(){
System.out.println("i am just a student");
}

}

public class abvoid {

public static void main(String[] args) {
student stu1=new student();
stu1.speak();
// TODO code application logic here
}

}

结果



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

简单继承
class role {
private String name;
private int level;
private int blood;
public int getBlood(){
return blood;
}
public void setBlood(int blood){
this.blood=blood;
}
}//建立父类
class Magician extends role{
public void fight(){
System.out.println("魔法攻击");
}
}//子类继承
public class roleplay{
public static void main(String[] args){
Magician mag =new Magician();
mag.setBlood(100);
mag.setLevel(1);
mag.setName("justin");
System.out.printf("%d %d %s %n",mag.getBlood(),mag.getLevel(),mag.getName());
mag.fight();
}//从输出可以看出实例mag已继承父类role。
}

运行结果:



子父类方法覆盖:
public class role{
public static void main(String[] args){
Magician mag =new Magician();
SwordsMan swords=new SwordsMan();
mag.setBlood(100);
mag.setLevel(1);
mag.setName("justin");
swords.setBlood(500);
swords.setLevel(2);
swords.setName("bob");
drawFight(swords);
drawFight(mag);
}
static void drawFight(roleplay Role){
System.out.print(Role.getName());
Role.fight();

}
}

结果显示:



本周代码托管截图



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

这两周的学习内容中有很多的概念,书上的例子也有很多需要我们去实践,虽然说课本上的代码也敲了,知识内容都理解了,但是感觉学的还是不踏实,对于java面向对象这一块还是不能很好的应用。只能说学的多而不精,看上去每个概念都学了,但是应用方面有很大的欠缺。希望以后自己慢慢地实践过程中再学习体会吧。

学习进度条

代码行数(新增/累积)博客量(新增/累积)学习时间(新增/累积)重要成长
目标3500行30篇400小时
第一周100/1002/220/20
第二周200/3001/330/50
第三周300/6001/428/78
第四周300/9002/620/98

参考资料

Java学习笔记(第8版)

《Java学习笔记(第8版)》学习指导
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: