zoukankan      html  css  js  c++  java
  • 继承

    1. 继承基本知识:
      1. 超类基类父类->子类派生类
      2. 子类继承父类的除private外的字段、方法以及构造器
      3. 超类的字段建议设定为private,并通过专用的方法来提供接口访问这些字段
    2. super和this的区别:super并不是引用,只是一个指示编译器调用超类方法的特殊关键词
    3. 子类构造器:可以通过super来调用超类构造器,或者缺省调用超类默认构造器。对超类构造器的调用必须是在子类构造器的代码体第一行。
    4. 多态:一个变量(如类型指针)可以指示多种实际类型的,运行时自动选择调用哪个类型被叫做动态绑定。
    5. 继承中的多态:被覆盖的方法只会选择覆盖后的版本,除非显示的选择;多态方法会根据参数类型判断;但是字段会根据指针类型选择版本,即使是子类实例,使用超类引用来访问超类子类的同名字段会访问超类的字段。(虽然一般超类字段都是private的,而且字段重名比较少见)
    6. jvm如何实现动态绑定:
      1. 对于方法调用:先在实际类型内查找,若没有则进入上一级超类查找。
      2. 对于字段调用:根据指针类型查找。
      3. 具体结构:多态判断只在多态方法上复杂,多态的原因有:覆盖、父子同名不同签名的方法、类自己之中同名不同签名的方法。为了分辨不同,jvm维护一张方法表辅助查找。
    7. 如何阻止继承?使用final。
      1. 将final用于类:方法将自动置为final,但是字段不会;无法被继承
      2. 将final用于方法和字段:就是使得他们无法改变
    8. 继承体系中的类型转换:向下转型必须被谨慎的使用,如果发现必须向下转型,应当首先查看是否超类的设计不合理,认真验证后再决定。
      1. 向上转型:隐形实现
      2. 向下转型:可以通过编译,但是运行会抛出异常。建议使用if-intanceof显式的验证,那么编译器会同一运行程序。
      3. 使用instanceof来检查转换是否合理是建议的
    9. 抽象类
      1. abstract只应用于方法和类,不用于字段。
      2. 包含abstract方法的类必须也被声明为abstract。
      3. 抽象类可以包含非抽象方法,可以不包含抽象方法。
      4. 抽象类无法被实现。
      5. 抽象类指针(java中的指针和c不同)是被允许的。
    10. protected访问修饰符:对本包和所有子类可见。
    11. Object类:
      1. 如何重写equals方法:判断是否引用相同->判断是否为空引用->判断类是否相同(使用getclass而非instanceof,因为instanceof包容子类,而equals要求对称性,但是如果你足够熟悉,可以在继承体系的equals中巧妙的使用instanceof)->判断自定义条款的是否相同
      2. 自定义继承体系中的equals方法:首先将调用超类的equals,然会是子类的equals
    12. 泛型数组列表:
      1. 菱形语法。
      2. 提高ArrayLIst.add效率:使用ensureCapacity来手动增加底层数组,而不是让容器自己多次添加;在初始化的时候给出一个合适的初始大小
      3. 提高ArrayList空间效率:trimToSize将抛弃多余的已分配空间。
      4. ArrayList与泛型:不带泛型的容器取出的对象是object的,需要强转才能使用;而带泛型的则直接返回泛型对象;所以可以通过ArrayList<T>和toArray实现泛型数组
      5. 容器的插入删除都是数组的插入删除,若插入到中间则需要将所有后面的元素后移。
    13. 包装器:其本身、方法、字段,都是final的,所以它是完全不可改变不可继承重写的。为了得到可改变的字段,使用holder类来实现
  • 相关阅读:
    python--模块导入与执行
    python--re模块
    python--递归函数
    CSRF攻击与防御
    XSS跨站脚本攻击
    HTTP协议详解以及URL具体访问过程
    Git服务器搭建
    浅谈PHP异常处理
    常用的几个PHP加密函数
    PHP将数据导出Excel表中(投机型)
  • 原文地址:https://www.cnblogs.com/gjl-blog/p/8562987.html
Copyright © 2011-2022 走看看