Java抽象类图片 java抽象类设计_java 抽象类


抽象类和接口

1. 抽象类

java允许在定义方法时不写方法体。不包含方法体的方法为抽象方 法,抽象方法必须使用abstract关键字来修饰


abstract void shout(); //定义抽象方法shout()


当一个类中包含了抽象方法,该类必须使用abstract关键字来修饰,使用abstract关键字修饰的类为抽象类,具体示例如下。


// 定义抽象Animal
abstract class Animal{
// 定义抽象方法shout()
Abstract int shout();
}


在定义抽象类时需要注意,包含抽象方法的类必须声明为抽象类,但抽象类可以不包含任何抽象方法,只需使用abstract关键字来修饰即可。另外,抽象类是不可以被实例化的,因为抽象类中有可能包含抽象方法,抽象方法是没有方法体的,不可以被调用。如果想调用抽象类中定义的方法,则需要创建一个子类,在子类中将抽象类中的抽象方法进行实现。

子类实现了父类的抽象方法后, 可以正常进行实例化,并通过实例化对象调用方法。


2. 接口

如果一个抽象类中的所有方法都是抽象的,则可以将这个类用另外一种方式来定义,即接口。接口是由常量和抽象方法组成的特殊类, 是对抽象类的进一步抽象。

在定义接口时, 需要使用interface关键字来声明, 其语法格式如下。


[public]  interface 接口名 [extends接口1,接口2…]{
[public]  [static]  [final] 数据类型 常量名=常量值;
[public]  [abstract]  返回值 抽象方法名 (参数列表);
}


一个接口可以有多个父接口, 它们之间用逗号隔开。Java 使用接口的目的是为了克服单继承的限制,因为一个类只能有—个父类,而一个类可以实现多个接口。接口中的变量默认使用“public static final"来修饰,即全局常量;接口中定义的方法默认使用“public abstract"来修饰,即抽象方法。如果接口声明为public,则接口中的变量和方法全部为public。由于接口中的方法都是抽象方法,因此不能通过实例化对象的方式来调用接口中的方法。此时需要定义一个类, 并使用implements关键字实现接口中所有的方法。—个类可以在继承另—

个类的同时实现多个接口, 这些接口在implements子句中要使用英文逗号( , )隔开。接口的实现类声明格式如下。


[<修饰符>] class <类名> [extends <超类名>] [implements <接口1>,<接口2>, … ]


需要注意的是, —个类实现—个接口,必须给出接口中所有方法的 实现,如果不能实现某方法,也必须写出—个空方法, 在程序中,还可以定义—个接口使用extends 关键字去继承另一个接口。


总结:

  1. 接口中的方法都是抽象的, 不能实例化对象。

2. 接口中的属性只能是常量。

3. 当—个类实现接口时,如果这个类是抽象类,则实现接口中的部分方法即可,否则需要实现接口中的所有方法。

4. 一个类通过implements关键字实现接口时,可以实现多个接口,被实现的多个接口之间用逗号隔开。

5. 一个接口可以通过extends关键字继承多个接口,接口之间用逗号隔开。

6. 一个类在继承另一个类的同时还可以实现接口,此时,extends关键字位于implements关键字之前(先继承,后实现)。