java 基础知识——04

来源:互联网 发布:男生行为心理女生必知 编辑:程序博客网 时间:2024/06/05 11:42


1.

Java抽象类、接口、内部类和泛型

    1.
      抽象类除了包含抽象方法外,还可以包含具体的变量和具体的方法。类即使不包含抽象方法,也可以被声明为抽象类,防止被实例化。

  

    关于抽象类的几点说明:

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

在下列情况下,一个类将成为抽象类:
  1. 当一个类的一个或多个方法是抽象方法时;
  2. 当类是一个抽象类的子类,并且不能为任何抽象方法提供任何实现细节或方法主体时;
  3. 当一个类实现一个接口,并且不能为任何抽象方法提供实现细节或方法主体时;注意:
    • 这里说的是这些情况下一个类将成为抽象类,没有说抽象类一定会有这些情况。
    • 一个典型的错误:抽象类一定包含抽象方法。 但是反过来说“包含抽象方法的类一定是抽象类”就是正确的。
    • 事实上,抽象类可以是一个完全正常实现的类
      2..

        注意:接口中声明的成员变量默认都是 public static final 的,必须显示的初始化。因而在常量声明时可以省略这些修饰符。

       *  接口是若干常量和抽象方法的集合,目前看来和抽象类差不多。

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

      3) 接口中没有构造方法,不能被实例化。

      4) 一个接口不实现另一个接口,但可以继承多个其他接口。接口的多继承特点弥补了类的单继承。

      *  接口必须通过类来实现(implements)它的抽象方法,然后再实例化类。类实现接口的关键字为implements。

     * 如果一个类不能实现该接口的所有抽象方法,那么这个类必须被定义为抽象方法。

    *  不允许创建接口的实例,但允许定义接口类型的引用变量,该变量指向了实现接口的类的实例。

   

     3...

       *  下面说一下抽象类和接口的主要区别。

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

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


综上所述,接口和抽象类各有优缺点,在接口和抽象类的选择上,必须遵守这样一个原则:

  • 行为模型应该总是通过接口而不是抽象类定义,所以通常是优先选用接口,尽量少用抽象类。
  • 选择抽象类的时候通常是如下情况:需要定义子类的行为,又要为子类提供通用的功能。
注意:
  • 泛型是 Java 1.5 的新增特性,它以C++模板为参照,本质是参数化类型(Parameterized Type)的应用。
  • 类型参数只能用来表示引用类型,不能用来表示基本类型,如  int、double、char 等。但是传递基本类型不会报错,因为它们会自动装箱成对应的包装类。

0 0