抽象类和接口

抽象类

•当定义一个类时,常常需要定义一些成员方法描述类的行为特征,但有时这些方法的实现方式是无法确定的。例如,定义Animal类时,shout()方法用于描述动物的叫声,但不同的动物的叫声是不同的,因此在shout()方法中无法准确地描述动物的叫声。因此提供了抽象方法来满足该需求。

抽象方法是使用abstract关键字修饰的成员方法,抽象方法在定义时不需要实现方法体。

抽象方法的定义格式:

1 abstract 返回值类型 方法名称(参数); 

•抽象类的定义格式:

 

abstract class 抽象类名称{
    属性;
    访问权限 返回值类型 方法名称(参数){                  //普通方法
              return [返回值];
    }
    访问权限 abstract 返回值类型 抽象方法名称(参数);  //抽象方法,无方法体
}        

 

•抽象类的定义规则

(1) 包含抽象方法的类必须是抽象类。

(2) 抽象类和抽象方法都要使用abstract关键字声明。

(3) 抽象方法只需声明而不需要实现。

(4) 如果一个类继承了抽象类,那么该子类必须实现抽象类中的全部抽象方法。

•注意:

使用abstract关键字修饰的抽象方法不能使用private修饰,因为抽象方法必须被子类实现,如果使用private声明,则子类无法实现该方法。

 

接口

如果一个抽象类的所有方法都是抽象的,则可以将这个类定义接口。在JDK8中,接口中除了可以包括抽象方法外,还可以包括默认方法(使用default修饰)和静态方法(使用static修饰),且这两种都允许有方法体。

•语法格式:

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

一个接口可以有多个父接口,父接口之间用逗号分隔。使用接口的目的是克服单继承的限制。

接口中变量默认使用“public static final"进行修饰,即全局变量。

接口中定义的方法默认使用"public abstract"进行修饰,即抽象方法。

如果接口声明为public,则接口中的常量和方法全部为public

接口包含三类方法:抽象方法、默认方法、静态 方法

静态方法:接口名.方法名

抽象方法和默认方法只能通过接口实现类的对象来调用

一个类可以在继承另一个类的同时实现多个接口,并且多个接口之间需要使用英文逗号来隔开。

定义接口的实现类

修饰符 class 类名 implements 接口1,接口2,...{
    、、、
}

接口的实现类必须实现接口中的所有方法,否则程序编译报错。

如果在开发中一个类既要实现接口,又要继承抽象类,则定义格式为:

修饰符 class 类名 extends 父类名 implements 接口1,接口2,...{
    、、、
}

在Java中,接口是不允许继承抽象类的,但是允许一个接口继承多个接口。

上一篇:抽象类和abstract关键字的使用


下一篇:抽象类