zoukankan      html  css  js  c++  java
  • Java基础(四)

    一、概述

    继承:是面向对象程序设计的一个基本概念,利用继承,人们可以基于已存在的类构造一个新类。继承已存在的类就是复用(继承)这些类的方法和域。

    反射:指在程序运行期间发现更多的类及其属性的能力。

    二、类,超类和子类

    关键字extends表示继承,表明正在构造的新类派生于一个已存在的类,已存在的类称为超类,基类或父类;新类称为子类,派生类或孩子类。

    在子类中可以增加域,增加方法或覆盖超类的方法,然而绝对不能删除继承的任何域和方法。

    super关键字也有两种用途:一是调用超类的方法;二是调用超类的构造器。

    一个对象变量可以指示多种实际类型的现象称为多态。在Java程序设计语言中,对象变量是多态的。

    在运行时能够自动的选择调用哪个方法的现象称为动态绑定。

    动态绑定有一个非常重要的特性:无需对现存的代码进行修改,就可以对程序进行扩展。

    由一个公共超类派生出来的所有类的集合被称为继承层次。在继承层次中,从某个特定的类到其祖先的路径被称为该类的继承链。

    方法的调用过程:

    1、编译器查看对象的声明类型和方法名。

    2、编译器将查看调用方法时提供的参数类型。(如果在所有名为f的方法中存在一个与提供的参数类型完全匹配,就选择这个方法,这个过程被称为重载解析)

    3、如果是private方法,static方法,final方法或者构造器,那么编译器就可以准确的知道应该调用哪个方法。(这种调用方法被称为静态绑定)

    4、当程序运行,并且采用动态绑定调用方法时,虚拟机一定调用与x所引用对象的实际类型嘴合适的那个类的方法。

    在覆盖一个方法的时候,子类方法不能低于超类方法的可见性。

    不允许扩展的类被称为final类,在定义类的时候使用了final修饰符。

    将方法或类声明为final主要目的是:确保它们不会在子类中改变语义。

    如果一个方法没有被覆盖并且很短,编译器就能够对它进行优化处理,这个过程被称为内联。

    进行类型转换的唯一原因是:在暂时忽视对象的实际类型之后,使用对象的全部功能。

    类型转换的条件:

    1、只能在继承层次内进行类型转换。

    2、在将超类转换成子类之前,应该使用instanceof进行检查。

    为了提高程序的清晰度,包含一个或多个抽象方法的类本身必须被声明为抽象的。除了抽象方法之外,抽象类还可以包含具体数据和具体方法。抽象类不能被实例化。

    可以定义一个抽象类的对象变量,但是它只能引用非抽象子类的对象。

    扩展抽象类可以有两种选择:

    1、在抽象类中定义部分抽象类方法或不定义抽象类,这样就必须将子类也标记为抽象类。

    2、定义全部的抽象方法,这样子类就不是抽象的了。

    Java用于控制可见性的四个访问修饰符:

    1、仅对本类可见——private。

    2、对所有类可见——public。

    3、对本包和所有子类可见——protected。

    4、对本包可见——默认,不需要修饰符。

    三、Object:所有类的超类

    在Java中,只有基本类型不是对象。

    Object类中的equals方法用于检测一个对象是否等于另外一个对象。这个方法将判断两个对象是否具有相同的引用。

    Java语言规范要求equals方法具有下面的特征:

    1、自反性:对于任何非空引用x,x.equals(x)应该返回true。
    2、对称性:对于任何引用x和y,当且仅当y.equals(x)返回true,x.equals(y)也应该返回true。
    3、传递性:对于任何引用x,y和z,如果x.equals(y)返回true,y.equals(z)返回true,x.equals(z)也应该返回true。
    4、一致性:如果x和y引用的对象没有发生变化,反复调用x.equals(y)应该返回同样的结果。
    5、对于任意非空引用x,x.equals(null)应该返回false。

    散列码(hash code)是由对象导出的一个整型值。

    toString方法用于返回表示对象值得字符串。只要对象与一个字符串通过操作符“+”连接起来,Java编译就会自动的调用toString方法,以便获得这个对象的字符串描述。

    四、泛型数组列表

    ArrayList是一个采用类型参数的泛型类。

    size()方法将返回数组列表中包含的实际元素数目。

    五、对象包装器与自动装箱

    所有的基本类型都有一个与之对应的类,这些类称为包装器。

    对象包装器是不可变的,还是final,因此不能定义它们的子类。

    六、枚举类

    在比较两个枚举类型的值时,直接使用“==”就可以了。

    toString的逆方法是静态方法valueOf。

    每个枚举类型都有一个静态的values方法,它将返回包含全部枚举值的数组。

    ordinal方法返回enum声明中枚举常量的位置。

    七、反射

    反射库提供了一个非常丰富且精心设计的工具集,以便编写能够动态操纵Java代码的程序。

    能够分析类能力的程序称为反射,反射机制可以用来:

    1、在运行时分析类的能力。

    2、在运行时查看对象。

    3、实现通用的数组操作代码。

    4、利用Method对象。

    八、继承的设计技巧

    1、将公共操作和域放在超类。

    2、不要使用受保护的域。

    3、使用继承实现“is-a”关系。

    4、除非所有的继承方法都有意义,否则不要使用继承。

    5、在覆盖方法时,不要改变预期的行为。

    6、使用多态,而非类型信息。

    7、不要过多的使用反射。 

  • 相关阅读:
    javaScript系列 [06]-javaScript和this
    javaScript系列 [05]-javaScript和JSON
    javaScript系列 [04]-javaScript的原型链
    javaScript系列 [03]-javaScript原型对象
    javaScript系列 [02]-javaScript对象探析
    javaScript系列 [01]-javaScript函数基础
    jQuery系列 第八章 jQuery框架Ajax模块
    jQuery系列 第七章 jQuery框架DOM操作
    jQuery系列 第六章 jQuery框架事件处理
    jQuery系列 第五章 jQuery框架动画特效
  • 原文地址:https://www.cnblogs.com/libinhyq/p/11919353.html
Copyright © 2011-2022 走看看