阶段性学习总结(3)

五、面向对象高级特性:

     1.抽象类和抽象方法:

        1>概念: 只给出方法定义而不具体实现的方法被称为抽象方法,抽象方法是没有方法体的,在代码的表达上就是没有“{}”。

                      包含一个或多个抽象方法的类也必须被声明为抽象类。

        2>使用 abstract 修饰符来表示抽象方法和抽象类。

        3>关于抽象类的几点说明:
           <1> 抽象类不能直接使用,必须用子类去实现抽象类,然后使用其子类的实例。

           <2>创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例,也就是可以使用抽象类来充当形参,实际实现类作为实参,也就是多态的应用。
           <3> 不能有抽象构造方法或抽象静态方法。

        4>有抽象方法的类一定是抽象类;抽象类不一定有抽象方法。

     2.接口interface:

        1>接口(interface)中,所有的方法必须都是抽象的,不能有方法体,它比抽象类更加“抽象”。

        2>接口使用 interface 关键字来声明,可以看做是一种特殊的抽象类,可以指定一个类必须做什么,而不是规定它如何去做。

        3>接口的特性:

           <1>接口可以实现多继承;

           <2>接口中只能定义抽象方法,这些方法默认为 public abstract 的,因而在声明方法时可以省略这些修饰符;

           <3>接口中没有构造方法,不能被实例化;

           <4>一个接口不实现另一个接口,但可以继承多个其他接口。

     3.抽象类与接口的区别:

        1>抽象类可以为部分方法提供实现,避免了在子类中重复实现这些方法,提高了代码的可重用性,这是抽象类的优势;而接口中只能包含抽象方法,不能包含任何实现。

        2>一个类只能继承一个直接的父类(可能是抽象类);但一个类可以实现多个接口,这个就是接口的优势。

        3>接口和抽象类各有优缺点,在接口和抽象类的选择上,必须遵守这样一个原则:
             行为模型应该总是通过接口而不是抽象类定义,所以通常是优先选用接口,尽量少用抽象类。
             选择抽象类的时候通常是如下情况:需要定义子类的行为,又要为子类提供通用的功能。

     4.内部类的概念和使用:

        1>概念: 

             一个类(或方法、语句块)的内部定义另一个类,称为内部类(Inner Class),有时也称为嵌套类(Nested Class)。    

        2>使用内部类的主要原因有:
           <1> 内部类可以访问外部类中的数据,包括私有的数据。
           <2>内部类可以对同一个包中的其他类隐藏起来。
           <3> 当想要定义一个回调函数且不想编写大量代码时,使用匿名(anonymous)内部类比较便捷。
           <4>减少类的命名冲突。

        3>内部类分类:
           内部类可以是静态(static)的,可以使用 public、protected 和 private 访问控制符,而外部类只能使用 public,或者默认。

           <1>成员式内部类:

                  1)在外部类内部直接定义(不在方法内部或代码块内部)的类就是成员式内部类,它可以直接使用外部类的所有变量和方法,即使是 private 的。

                     外部类要想访问内部类的成员变量和方法,则需要通过内部类的对象来获取。

                  2)修饰符,包括 public、protected、private、static、final 和 abstract,也可以不写。

                      static 修饰符,就为类级,否则为对象级。类级可以通过外部类直接访问,对象级需要先生成外部的对象后才能访问。

                     非静态内部类中不能声明任何 static 成员。

                  3)成员式内部类的访问

                     (1) 使用内部类中定义的非静态变量和方法时,要先创建外部类的对象,再由“outObjectName.new”操作符创建内部类的对象,再调用内部类的方法;

                     (2) static 内部类相当于其外部类的 static 成员,它的对象与外部类对象间不存在依赖关系,因此可直接创建;

                    (3) 由于内部类可以直接访问其外部类的成分,因此当内部类与其外部类中存在同名属性或方法时,也将导致命名冲突。

           <2>局部内部类:

                  1)局部内部类(Local class)是定义在代码块中的类。它们只在定义它们的代码块中是可见的。

                 2)局部类有几个重要特性:
                     (1)仅在定义了它们的代码块中是可见的;
                     (2)可以使用定义它们的代码块中的任何局部 final 变量;
                     (3)局部类不可以是 static 的,里边也不能定义 static 成员;
                     (4)局部类不可以用 public、private、protected 修饰,只能使用缺省的;
                     (5)局部类可以是 abstract 的。

           <3>匿名内部类:

                  匿名内部类是局部内部类的一种特殊形式,也就是没有变量名指向这个类的实例,而且具体的类实现会写在这个内部类里面。

                  注意:匿名类必须继承一个父类或实现一个接口。

六、Java集合类数据结构:

        1>常用的集合类数据结构有:线性表,链表,哈希表

        2>           

        3>Collection接口:
           <1> Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements)。

                    一些Collection允许相同的元素而另一些不行。一些能排序而另一些不行。

                    Java SDK不提供直接继承自Collection的类,Java SDK提供的类都是继承自Collection的“子接口”如List和Set。
           <2>所有实现Collection接口的类都必须提供两个标准的构造函数:

                  无参数的构造函数用于创建一个空的Collection,有一个Collection参数的构造函数用于创建一个新的Collection,这个新的Collection与传入的Collection有相同的元素。后一个构造函数允许用户复制一个Collection。

           <3>主要方法:
                 boolean add(Object o)添加对象到集合
                 boolean remove(Object o)删除指定的对象
                 int size()返回当前集合中元素的数量
                 boolean contains(Object o)查找集合中是否有指定的对象
                 boolean isEmpty()判断集合是否为空
                 Iterator iterator()返回一个迭代器
                 boolean containsAll(Collection c)查找集合中是否有集合c中的元素
                 boolean addAll(Collection c)将集合c中所有的元素添加给该集合
                 void clear()删除集合中所有元素
                 void removeAll(Collection c)从集合中删除c集合中也有的元素
                 void retainAll(Collection c)从集合中删除集合c中不包含的元素

       4>List接口:

           <1>List是有序的Collection,使用此接口能够精确的控制每个元素插入的位置。

           <2>实现List接口的常用类有LinkedList,ArrayList,Vector和Stack。

           <3>主要方法:
                  void add(int index,Object element)在指定位置上添加一个对象
                  boolean addAll(int index,Collection c)将集合c的元素添加到指定的位置
                  Object get(int index)返回List中指定位置的元素
                  int indexOf(Object o)返回第一个出现元素o的位置.
                  Object removeint(int index)删除指定位置的元素
                  Object set(int index,Object element)用元素element取代位置index上的元素,返回被取代的元素

       5>LinkedList类
            LinkedList实现了List接口,允许null元素。此外LinkedList提供额外的get,remove,insert方法在LinkedList的首部或尾部。这些操作使LinkedList可被用作堆栈(stack),队列(queue)或双向队列(deque)。
           注意LinkedList没有同步方法。如果多个线程同时访问一个List,则必须自己实现访问同步。

       6>ArrayList类
            <1>ArrayList实现了可变大小的数组。它允许所有元素,包括null。ArrayList没有同步。size,isEmpty,get,set方法运行时间为常数。但是add方法开销为分摊的常数,添加n个元素需要O(n)的时间。其他的方法运行时间为线性。

             <2>主要方法:
                    Boolean add(Object o)将指定元素添加到列表的末尾
                   Boolean add(int index,Object element)在列表中指定位置加入指定元素
                   Boolean addAll(Collection c)将指定集合添加到列表末尾
                   Boolean addAll(int index,Collection c)在列表中指定位置加入指定集合
                   Boolean clear()删除列表中所有元素
                   Boolean clone()返回该列表实例的一个拷贝
                   Boolean contains(Object o)判断列表中是否包含元素
                   Boolean ensureCapacity(int m)增加列表的容量,如果必须,该列表能够容纳m个元素
                   Object get(int index)返回列表中指定位置的元素
                   Int indexOf(Object elem)在列表中查找指定元素的下标
                   Int size()返回当前列表的元素个数

       7>Stack 类
            Stack继承自Vector,实现一个后进先出的堆栈。Stack提供5个额外的方法使得Vector得以被当作堆栈使用。

            基本的push和pop方法,还有peek方法得到栈顶的元素,empty方法测试堆栈是否为空,search方法检测一个元素在堆栈中的位置。Stack刚创建后是空栈。

       8>Set接口
            Set是一种不包含重复的元素的Collection,即任意的两个元素e1和e2都有e1.equals(e2)=false,Set最多有一个null元素。

       9>Map接口
            <1>当作一组key集合,一组value集合,或者一组key-value映射。

            <2>主要方法:
                   boolean equals(Object o)比较对象
                   boolean remove(Object o)删除一个对象
                   put(Object key,Object value)添加key和value

       10>Hashtable类

              Hashtable继承Map接口,实现一个key-value映射的哈希表。任何非空(non-null)的对象都可作为key或者value。

       11>HashMap类

             HashMap和Hashtable类似,不同之处在于HashMap是非同步的,并且允许null,即null value和null key。,但是将HashMap视为Collection时(values()方法可返回Collection),其迭代子操作时间开销和HashMap的容量成比例。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值