java抽象类和接口


1.抽象类 

  抽象类在概念上描述的是抽象世界,抽象类刻画了公有行为的特征,并且通过继承机制传送给它的派生类。抽象类使用关键字abstract 修饰,语法如下:

abstract class 类名{
	类体;
}

  抽象方法是指在抽象类中某些成员方法没有具体的实现,只有方法声明。抽象方法使用关键字abstract 修饰,格式如下:

    public abstract 返回类型 方法名([参数列表]);

  抽象类和抽象方法的具体规则如下:

    1.用abstract 关键字修饰一个类时,该类叫做抽象类,用abstract类修饰一个方法时,该方法叫做抽象方法。

    2.含有抽象方法的类必须被声明为抽象类,抽象类必须被继承,抽象方法必须被重写。

    3.抽象方法只需声明,不需实现。

    4.在抽象类中可以有数据成员,可以有零个或多个抽象方法,也可以由非抽象方法。

    5.抽象类不能被实例化。

    6.static、private、final 方法不能是抽象的。

    7.final 类型的类不能包含抽象方法。

    8.抽象类的子类必须实现父类中所有的抽象方法,否则,该类必须定义为抽象类。


2.接口

  2.1接口的定义

  接口是特殊的抽象类。接口的出现弥补了java只支持单继承的不足,它可以用来完成多继承的一些功能。在java中,使用关键字interface 来定义接口,借口的定义和类的定义很相似,分为接口的声明和接口体。但在接口中,所有的方法都是抽象的,所有的变量都是static常量,语法如下:

[修饰符] interface 接口名 [extends 父接口列表]{
	静态常量;
	方法声明;
}

  注:

    1.接口的修饰符只有public 和默认修饰符两种。

    2.接口名:是所创建的该接口的名字,一般用能反映该接口实际意义的英文名词表示。

    3.接口中的数据成员默认是 public static final 修饰的,即接口中的数据成员是全局静态常量,必须在定义时赋予常量初始值。

    4.在接口中所有的方法都是 public abstract 的。

    5.接口只能继承接口,不能继承类,但通过接口可以实现多重继承。

    6.接口没有构造方法,他们不能直接被实例化,但允许有接口类型的变量。

  2.2接口的实现

  在java中,使用implements关键字来实现接口,语法如下:

public class 类名 [extends 父类] implements 接口列表{
	类体;
}

  


3.抽象类和借口的异同

  相同点:1.都不能被实例化

      2.都可以应用于多态

  不同点:1.反映的设计理念不同

      2.接口支持多继承;抽象类不能实现多继承。

      3.接口只能定义抽象规则;抽象类既可以定义规则,还可能提供已实现的成员。

      4.接口是一组行为规范;抽象类是一个不完全的类,着重族的概念。

      5.接口可以用于支持回调;抽象类不能实现回调,因为继承不支持。

      6.接口只包含方法、属性、索引器、事件的签名,但不能定义字段和包含实现的方法;抽象类可以定义字段、属性、包含有实现的方法。  

      7.接口可以作用于值类型和引用类型;抽象类只能作用于引用类型。


原文地址:https://www.cnblogs.com/xiaonanman/p/6751827.html