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

教材学习内容总结

继承

什么时候使用继承?

当多个类中出现重复定义的行为(即多个类中出现重复的代码)时,就把相同的程序代码提成为父类。

使用继承的意义
  1. 提高了代码的复用性。
  2. 使类和类之间产生关系,从而产生多态 。
注意
  1. 当类与类之间有所属关系时才使用继承。不能因为要使用别的类中的功能而随意使用继承。
  2. 子类只能继承一个父亲。
多态与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/100 2/2 20/20
第二周 200/300 1/3 30/50
第三周 300/600 1/4 28/78
第四周 300/900 2/6 20/98

参考资料

20145204 《Java程序设计》第四周学习总结的更多相关文章

  1. Java程序设计第四周学习总结

    1. 本周学习总结 1.1 尝试使用思维导图总结有关继承的知识点. 1.2 使用常规方法总结其他上课内容. 答:①String类是final类,不能定义String的子类. ② instanceof ...

  2. 杨其菊201771010134《面向对象程序设计(java)》第四周学习总结

    <面向对象程序设计(java)> 第四周学习总结 第一部分:理论知识 1.类与对象 a.类(class)是构造对象的模板或蓝图.由类构造对象的过程称为创建类的实例: java中类声明的格式 ...

  3. 对于“2017面向对象程序设计(JAVA)第四周学习总结”存在问题的反馈

    对于“2017面向对象程序设计(JAVA)第四周学习总结”存在问题的反馈 “这部分同学博文总结没有写,实验作业没有提交.”——1.关于博文作业.实验作业教学功能的正解:学习知识.暴露问题.衔接课上.2 ...

  4. 201871010106-丁宣元 《面向对象程序设计(java)》第四周学习总结

    201871010106-丁宣元 <面向对象程序设计(java)>第四周学习总结 正文开头 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-da ...

  5. 20155318 2016-2017-2 《Java程序设计》第九学习总结

    20155318 2016-2017-2 <Java程序设计>第九学习总结 教材学习内容总结 学习目标 了解JDBC架构 掌握JDBC架构 掌握反射与ClassLoader 了解自定义泛型 ...

  6. 《Java程序设计》第二学习总结

    <Java程序设计>第二学习总结 教材学习内容总结 类型 byte(字节) shot(短整型) int(整型) long(长整型) float(浮点型) double(双精度) char( ...

  7. 20145304 刘钦令 Java程序设计第二周学习总结

    20145304 <Java程序设计>第2周学习总结 教材学习内容总结 java可区分基本类型和类类型(即参考类型)两大类型系统. 基本类型主要可区分为整数.字节.浮点数.字符与布尔. 整 ...

  8. 20145304 刘钦令 Java程序设计第一周学习总结

    20145304<Java程序设计>第1周学习总结 教材学习内容总结 1995年5月23日,是公认的Java的诞生日,Java正式由Oak改名为Java. Java的三大平台是:Java ...

  9. 20145120黄玄曦 《java程序设计》 寒假学习总结

    1和2.我对未来规划不多,我认为好好学习积累知识能帮助我应对未来的挑战,这是我的学习动力之一,此外,了解新知识满足好奇心也是我的主要的学习动力. 3.我认为专业课学习比公务员考试重要,我认为专业知识是 ...

  10. 201621123007 Java程序设计第一周 学习总结

    第一周-Java基本概念 201621123007 <Java程序设计> 第一周学习总结 1. 本周学习总结 java是面向对象的一类语言,三大特征:封装性,继承性,多态性. jdk jr ...

随机推荐

  1. 在centos命令行下安装软件

    考虑到用linux纯命令行模式时,通常都是用作服务器,所以,一般主要是安装一个php.mysql.apache的集成环境和ftp服务器,在这里用xampp集成包即可解决所有问题,在这里说一下我自己的做 ...

  2. ring0 根据EThread遍历线程

    ntdll!_ETHREAD +0x000 Tcb : _KTHREAD +0x200 CreateTime : _LARGE_INTEGER 0xff58b008 +0x208 ExitTime : ...

  3. HDCMS导航高亮显示!解决办法

    第一种方法:(传递class) <channel type='top' row='8' class='cur' > <li class='{$field.class}'> &l ...

  4. 09.Curator临时节点

        使用Curator也可以简化Ephemeral Node (临时节点)的操作.临时节点驻存在ZooKeeper中,当连接和session断掉时被删除.比如通过ZooKeeper发布服务,服务启 ...

  5. binlog分析方法

    线上处理问题的时候经常遇到业务说写入了但是数据不对,这种情况八成是业务改了之后又改过来了.但是我们需要证据,下面我们就说说简单的binlog分析 工具:mysqlbinlog #-vvv显示明文sql ...

  6. php引用(&)详解及注意事项——引用返回function &a();&a()

    http://www.cnblogs.com/xiaochaohuashengmi/archive/2011/09/10/2173092.html 函数的引用返回 先看代码 <?php func ...

  7. Jury Compromise---poj1015(动态规划,dp,)

    题目链接:http://poj.org/problem?id=1015 大致题意: 在遥远的国家佛罗布尼亚,嫌犯是否有罪,须由陪审团决定.陪审团是由法官从公众中挑选的.先随机挑选n 个人作为陪审团的候 ...

  8. python知识大全目录,想学的看过来!

    Python总结篇——知识大全   python装饰器   PyCharm安装与配置,python的Hello World   sort与sorted的区别及实例   我必须得告诉大家的MySQL优化 ...

  9. 【Python】接口自动化测试-Fidder的使用(未完待续……)

    一.fidder一些一定需要掌握的知识. 1.工具简介 2.清屏操作(1中提到了,这里再着重说明下): 3.get和post请求参数相关: 4.会话框(Fidder左侧区域内容解析): 5.Reque ...

  10. 解读webpack的bundle.js

    可能就是好奇心略重了,读了一下webpack打包后的bundle.js的代码,复杂的模块可能读不懂,但简单的hello world模块我还是能看懂的.没什么目的,就是想通过几个简单的模块,一条简单的w ...