java抽象类和接口的多态

来源:互联网 发布:wp软件开发 编辑:程序博客网 时间:2024/06/08 02:43

抽象类abstract class

  用关键字abstract修饰的类叫做抽象类,抽象类不能被实例化,即不能new出来一个抽象类的对象(实例)。

 

抽象方法

  用abstract关键字所修饰的方法叫做抽象方法

  抽象方法必须定义在抽象类中。

  抽象方法有声明,无实现(没有花括号{},有花括号但是内容为空也是一种实现,空实现)。

  相对应的有声明有实现的方法可以叫做具体方法

抽象类和抽象方法的关系

  抽象方法必须定义在抽象类里面。

  如果一个类包含了抽象方法,那么这个类一定要声明成抽象类。

  如果某个类是抽象类,那么这个类既可以包含抽象方法,也可以包含具体的方法(有声明,有实现)。

  抽象类中如果全是具体方法也是允许的;抽象类也可以是空的,即什么也不包含。

接口与抽象类的关系

接口和抽象类的联系:

  接口的地位等同于class,接口中的所有方法都是抽象方法

  接口中在定义方法的时候,可以使用abstract关键字,也可以省略abstract关键字,(大多数时候都是省略的),方法仍是抽象的,不能有实现的花括号。

接口和抽象类的区别:

      接口用关键字interface声明。

  接口中的方法必须全是抽象方法;而抽象类中的方法,可以有抽象的,也可以有具体的方法。

  类可以实现接口,用关键字implements。Java是单继承的,但是却可以实现多个接口。(一个类可以同时继承另一个类,并且实现多个接口。)

  如果一个类实现了一个接口,并且这个类不是抽象类,那么这个类必须实现这个接口中的所有方法。如果是抽象类,则无需实现接口中的所有方法。

      接口中的所有方法自动地属于public,因此在接口中声明方法时,不必提供关键字public。但是在实现接口时,必须把方法声明为public。

  在接口中还可以定义成员变量(常量),接口中的域被自动地设为public static final

  然而,接口绝不能含有实例域,也不能在接口中实现方法,提供实例域和方法实现的任务应该由实现接口的那个类来完成。

接口的特性

  接口不是类,不能使用new运算符实例化一个接口。

  尽管不能构造接口对象,却能声明接口变量,接口变量必须引用实现了接口的类对象。

  Comparable x;

  x=new Employee(…);

  与使用instanceof检查一个对象是否属于某个特定类一样,也可以用instanceof检查一个对象是否属于某个特定的接口。

  接口也可以像类一样建立继承关系。

  尽管每个类只能拥有一个超类,但却可以实现多个接口,使用逗号将实现的各个接口分隔开。

抽象类的特性

      抽象类也能声明引用,但不能直接实例化。同接口的特性
0 0