教材学习内容总结

第六章部分 - 继承与多态

何谓继承

  • 继承
    面向对象中,子类继承父类,避免重复的行为定义。一般来说,父类的父类也称父类,且同一个子类只允许拥有一个父类,而同一个父类则可以拥有多个子类。继承的出现提高了代码的复用性,也让类与类之间产生了关系,提供了多态的前提。

  • 在Java中,使用关键字extends来表示类与类之间的继承关系:public class SwordsMan extends Role 中类SwordsMan继承了类Role,类SwordsMan扩充了类Role的行为,也就是类Role中有定义的程序代码,类SwordsMan因为继承而都拥有了。

  • IS-A
  • IS-A译为“是一种”,子类与父类就是一种“IS-A”的关系。

    • 注意建立对象时候的顺序,应该遵守从右往左读的原则(这样才符合IS-A原则):

      Role role1 = new SwordsMan();
      Role role2 = new Magician();
    • 赋值时:如果用父类建立了一个对象实例,那么要将这个对象赋给它的子类时,需要进行强制转:

      Role role1 = new SwordsMan();
      SowrdsMan swordsMan = (SwordsMan) role1;
    • 我们还可以使用instanceof来判断IS-A关系:

      System.out.println(SwordsMan instanceof Role);     \\输出true
      System.out.println(Role instanceof SwordsMan); \\输出false
  • 多态
    按照字面的意思上说,就是多种状态。指的是使用一个接口,操作多种类型的数据。

  • 覆盖(Override)
    • 一般来说,当子类和父类具有一模一样的方法时,会出现覆盖操作,也就是重新定义行为。因为子类一般来说都有其独特的功能,父类一般的函数定义不能满足每个不同角色的需要。
    • 函数的覆盖也更好的体现了面向对象的多态性。
    • 要将覆盖(Override)与重载(Overload)区分开:覆盖除了保留了原有的相同方法部署,但执行内同不同,方法是一样的;而重载指的是函数名相同,但调用变量的类型个数都不同,是不同的函数,并不存在某个函数把某个函数覆盖的情况。
    • 注意:
  • 在重新定义父类中的某个方法时,除了可以定义权限较大的关键字外,子类必须撰写与父类方法中相同的签 署。如果函数名打错了,那就不是重新定义了,而是子类新定义了一个方法函数。

    1. 通常,我们会在子类中重新定义行为前加上\@Override,用以判断该方法是否真的重新定义了父类中的一个方法。
    2. 重新定义方法时,对于父类中的方法权限,只能扩大不能缩小。
  • 抽象方法、抽象类
    • abstract:对于一个类的方法区块中实际上没有撰写任何程序代码,为了避免不被漏掉,可以使用abstract标示该方法为抽象方法。该方法不用撰写{}区块,直接“;”结束即可。
    • 注意:
    1. Java中有抽象方法的类一定是抽象类,但抽象类中的方法不一定都是抽象方法。
    2. 象类,但抽象类中的方法不一定都是抽象方法
  • Square(正方形)类继承Rectangle(矩形)类合适吗?
    合适,因为正方形是一种(IS-A)矩形,它拥有矩形的一般特点。

继承语法细节

  1. protected成员:被声明为protected的成员,相同包中的类可以直接存取,不同包中的类可以在继承后的子类直接存取。
  2. 重新定义的细节:在调用方法前加上super关键字,重新定义父类中的方法在子类中权限只能扩大不能缩小,在jdk5之后返回类型也可以是父类中方法返回类型的子类。
  3. 构造函数。
  4. 垃圾收集:对于不再有用的对象,JVM的垃圾收集器会将其释放。不同的需求会有不同的垃圾收集算法。
  5. 抽象类:如果还有些方面没有确定,可以调用抽象方法,等到平台确定后,再对代码进行符合这个平台的完善就行。
    public class Role1{
    private String name;
    private int level;
    private int blood;

第七章部分 - 接口与多态

何谓接口

  • 接口定义行为

    • 对于定义行为,Java中可以使用interface关键字定义。
    • 是一种特殊的类,里面全部是由全局常量(static final)和公共的抽象方法所组成。
    • 接口的数据成员,只允许被public, static, final修饰。
      接口的方法成员,只允许被public, abstract修饰。
    • 接口中的数据成员都为static final类型,必须进行初始化,且接口的数据成员的值不能被修改,允许省略static, final关键字。
    • 接口中的方法必须是“抽象方法”,不能有方法体,允许省略public及abstract关键字。
    • 对于接口多态语法的判断,方式是“右边是不是拥有左边的行为”,或者“右边对象是不是操作了左边接口”。
  • implements
    • 接口不能用new运算符直接产生对象,必须利用其特性设计新的类,再用新类来创建对象与抽象类一样,接口要使用也必须通过子类,子类通过implements关键字实现接口。
    • 操作某接口时,对接口中定义的方法有2种处理方式,一是操作接口中定义的方法,二是再度将该方法标示为abstract.
    • 实现格式:

      class 子类名称 implements 接口A,接口B,….{
      //子类成员声明
      }
  • 解决需求变更
    需求会不断变化,架构也有可能因此而修改。好的架构在修改时,其实也不会全部的程序代码都被牵动,这就是设计的重要性。一般来说,会确定一个程序的需求边界,然后设计好架构,接着就是不断朝着这个方向进行优化。

接口语法细节

  • 接口中的public abstract可以省略,但要注意:接口中的方法必须是“抽象方法”,不能有方法体,允许省略public及abstract关键字。
  • 接口中可以使用extends继承接口,并且可以继承多个接口
    • 接口不能继承一个抽象类,却可以通过extends同时继承于多个接口。
    • 例如:interface A extends B, C{……}
  • 匿名内部类
    • 匿名内部类也就是没有名字的内部类。正因为没有名字,所以匿名内部类只能使用一次,它通常用来简化代码编写,但使用匿名内部类还有个前提条件:必须继承一个父类或实现一个接口。
    • JDK8 前在匿名内部类中访问局部变量,则该局部变量必须为final
  • enum
    • 可以用于定义常量,例如:

      public enum Color {
      RED, GREEN, BLANK, YELLOW
      }
    • 可以用于switch语句,将enum定义的枚举常数用以switch判断选择。

20145234黄斐《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. 20145234黄斐《信息安全系统设计基础》第六周学习总结(Y86模拟器的安装)

    Y86模拟器的安装 由于本人的电脑有些问题,在安装的时候忽然断电导致之前的成果都没有截图. 1.安装bison和flex词法分析工具 sudo apt-get install bison flex t ...

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

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

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

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

  7. 20145234黄斐《信息安全系统设计基础》第七周(Linux命令复习)

    已经到了11月,学期过半,而<信息安全系统设计基础>这门课也要到了期中考试了.所以,我在这里,对前半个学期的最基础的知识,做一个复习 复习计划分为两步,本次为Linux命令,下次计划复习g ...

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

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

  9. 20145234黄斐《java程序设计》实验四—Android程序设计

    实验过程: JDK.Android Studio的安装: 参见卢晓明博客:http://www.cnblogs.com/lxm20145215----/p/5444207.html 注意事项:解决Fe ...

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

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

随机推荐

  1. 【Z】段错误Segment Fault定位,即core dump文件与gdb定位

    使用C++开发系统有时会出现段错误,即Segment Fault.此类错误程序直接崩溃,通常没有任何有用信息输出,很难定位bug,因而无从解决问题.今天我们介绍core dump文件,并使用gdb进行 ...

  2. July 12th 2017 Week 28th Wednesday

    No way is impossible to courage. 勇敢面前没有通不过的路. Without faith and courage, nothing is possible. With t ...

  3. Apache Commons-logging使用实例

    Apache Commons-logging使用实例 本文将介绍如何在程序中使用Apache Commons-logging author: ZJ 07-3-17 Blog: [url]http:// ...

  4. 大素数测试的Miller-Rabin算法

    Miller-Rabin算法本质上是一种概率算法,存在误判的可能性,但是出错的概率非常小.出错的概率到底是多少,存在严格的理论推导. 一.费马小定理 假如p是质数,且gcd(a,p)=1,那么 a(p ...

  5. Linux 统计文件夹,文件数量的命令

    用的最多的就是: ls -l | grep "^-" | wc -l ls -l 普通文件就是以 - 开头,文件夹以 d 开头 grep 后面接正则表达式:^- 以 - 开头的匹配 ...

  6. 2019.1.10 Mac安装Nginx服务器

    1.安装Homebrew ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/in ...

  7. easyui分页的使用方法

    使用: $("#tt").datagrid("getPager").pagination(option); 例子: $("#tb").dat ...

  8. IE下页面左偏移并页头空出一行解决方法

    在其它浏览器下显示正常,包括360浏览器,在IE下,页面向左偏移,通过firebug查看,head标签为空,并且head标签里面的内容都跑到body标签内了,原因是有bom头,访问的页面或是加载,包含 ...

  9. Process.waitFor()导致主线程堵塞问题

    今日开发的时候使用jdk自带的运行时变量 RunTime.getRunTime() 去执行bash命令.因为该bash操作耗时比较长,所以使用了Process.waitFor()去等待子线程运行结束. ...

  10. Java项目排查cpu负载高

    背景 我负责的其中一个项目在空负载的情况下,CPU占用率依然保持着100%左右,线上.测试.开发的服务都一样:是什么导致的呢?在开发环境我查看了请求流量,这个流量可以忽略但CPU占用率一直在60%-1 ...