java编程是面向对象的编程,将不同的模块抽象成一个个对象。一般将对象抽象成抽象层和实现层,抽象层主要由接口和抽象类实现,这样能够提高程序的复用率,增加程序的可维护性,可扩展性。所以面向对象的编程又可以称为是面向接口的编程,面向抽象的编程。接口和抽象类都是抽象的类,熟悉两者之间的区别和联系,能够在合适的时候灵活的运用。
一)抽象类
抽象类是使用abstract关键字修饰的类,未使用abstract 关键字修饰的类一般称作实体类。下面是一个抽象类的例子:
public abstract class A{
private int para;
public A(int para){
this.para=para;
}
public void entityMetnod(){
System.out.println("this is a entity method from abstract"); }
public abstract void abstractMethod();
}
public abstract void abstractMethod();这个是一个抽象方法的声明,抽象方法在返回类型前用abstract关键字修饰的方法;不含
abstract关键字的方法是实体方法。一个抽象类中类可以包含任意个(0个、1个或多个)抽象方法。
注意:抽象类严禁直接创建该类的对象
强制子类覆盖抽象方法
二)接口
接口用interface关键字来修饰,是一种复合数据类型,而不是类的类型。Java 语言的数据类型分为两大类:基本数据类型和复合数
接口就是复合数据类型的一种,复合类型还有数组、类,如下是一个接口
public interface B{
public static int para=0;
public void interfaceMethod();
}
注意:1)接口中的方法一定是抽象的,abstract可以省略;
2)变量和方法必需是public类型,变量必需初始化,是静态的;
3)接口中不能有构造函数,这是接口与类的最大的区别;
4)接口中不能有实体方法
5)接口可以多继承接口 public interface C extends interfaceB,interfaceC,...{},类只能继承一个实体类
三)抽象类和接口的共同点
1)都不能用自身创建对象实例:
A a = new A(); B a = new B(); 都是不允许的
2)都可以声明对象,但是都只能使用子类的构造方法进行创建。例如:
public BImpl implements B{
public void interfaceMethod(){}
public BImpl(){}
}
B a = newBImpl();
3)抽象类和接口内部都可以包含抽象方法。
四)抽象类和接口的区别
1)抽象类可以继承类,用关键字extends;接口不可以继承类,只能继承接口;
2)抽象类是被继承(extends)的,接口是被实现(implements)的
3)抽象类一个类,可以有构造函数、实体方法、私有属性、抽象方法;接口不是类,只能有抽象方法和公有常量属性,不能有实体方法