首页 > 代码库 > Java 面向对象

Java 面向对象

1、对象与实例

  对象与实例之间的区别:对象是同类事物的抽象形式,实例是对象的具体化。对象可以实例化很多实例。

     无需实例化也可以使用的是对象的静态方法。也就是说这个方法适用于同类事物的所有对象。

   当获取或设定同类事物不同属性的时候,就需要对对象进行实例化,这些实例之间相互区分。

2、嵌套类

  对于C++来说,嵌套类是合成型聚集关系的另一种表达方式,在代码生成时映射成inline class。Java的内部类与C++的嵌套类的区别在于:是否有指向外部的

引用。Java的内部类以为着:创建一个static内部类的对象,不需要一个外部类对象,不能从一个内部类的对象方位一个外部类的对象。

    关于非GUI的内部类,这篇文章蛮好:http://lavasoft.blog.51cto.com/62575/179484/

    关于GUI编程的内部类(事件监听),这个文章可以作为参考,大致的套路都差不多:http://blog.sina.com.cn/s/blog_78e96ce70100tr9c.html

3、集合类

  Java的容器类型有两种:Collection、Map。

    Collection:

                  (特定次序存放)List :ArrayList,LinkedList,Vector

       (每个值只能保存一个对象,不能含重复的元素)Set:HashSet<散列函数>,TreeSet<红黑树>,LinkedHashSet<链表+散列>。

                   Queue: PriorityQueue。

          Map:

                  HashMap:基于哈希表的 Map 接口的实现。此实现提供所有可选的映射操作,并允许使用 null 值和 null 键。(除了非同步和允许使用

                                  null 之外,HashMap 类与 Hashtable 大致相同。)此类不保证映射的顺序,特别是它不保证该顺序恒久不变。 

                  HashTable:此类实现一个哈希表,该哈希表将键映射到相应的值。任何非 null 对象都可以用作键或值。为了成功地在哈希表中存储和获取对象,

                                   用作键的对象必须实现 hashCode 方法和 equals 方法。

                  TreeMap:基于红黑树(Red-Black tree)的 NavigableMap 实现。该映射根据其键的自然顺序进行排序,或者根据创建映射时提供的 Comparator

                                 进行排序,具体取决于使用的构造方法。 

      (1)容器类与数组的区别

             容器类只是能够持有对象的引用,而不是对象的副本,一旦将对象置于容器内,对象的类别信息就损失掉了。

             所有的容器中,ArrayList应当作为默认的选择。

             插入、删除频繁时使用LinkedList。

             插入和查找较多时,HashSet优于HashTree,只有需要一个有序输出时采用TreeSet。

             HashMap用于快速查找。

4、构造函数和析构函数

   1、构造函数可以被重载,这样允许多种方式初始化一个类。

     2、构造函数没有返回值。

     3、存在继承关系时,子类构造函数调用前,父类构造函数调用。

   4、多个构造函数存在时,可以决定调用其中某一个,但是不可以不调用;不显式的调用,那么就会调用无参构造函数。

     5、存在继承关系时,析构函数的调用顺序与构造函数相反。

5、多态性

     首先区分重载和覆盖。

     重载的规则:
      1、在使用重载时只能通过相同的方法名、不同的参数形式实现。不同的参数类型可以是不同的参数类型,不同的参数个数,不同的参数顺序

     (参数类型必须不一样;

      2、不能通过访问权限、返回类型、抛出的异常进行重载;

      3、方法的异常类型和数目不会对重载造成影响;

      编译器对于重载的函数,在编译阶段就会进行区分,所以重载并非多态性的一部分,因为这些函数都是静态的。而所谓的多态,核心思想是晚绑定,即运行时

绑定,是动态的。

       覆盖:子类重写父类的同名函数。

       多态,一言以蔽之:允许将子类的指针或者引用赋给父类。

    1、使用父类类型的引用指向子类的对象;

  2、该引用只能调用父类中定义的方法和变量;

  3、如果子类中重写了父类中的一个方法,那么在调用这个方法的时候,将会调用子类中的这个方法;(动态连接、动态调用)

  4、变量不能被重写(覆盖),”重写“的概念只针对方法,如果在子类中”重写“了父类中的变量,那么在编译时会报错。