关于Java接口和抽象类

接口和抽象类

接口(interface)

接口相当于对外的约定和标准,操作系统产生的目的之一就是为了屏蔽软件的复杂性和硬件的简单性之间的差异,为软件提供统一的标准。

用法:

public interface Apple{}

接口的一些特性:

  • 接口不能被实例化,所以接口中不能有任何构造方法,你定义构造方法编译会出错。
  • interface接口是一个完全抽象的类,没有实现任何方法,只是定义了方法。
  • 接口中只能使用两种访问修饰符:public-对整个项目可见,default-只有包访问权限
  • 只提供方法的定义,不实现方法,需要其他类implements后自己实现
  • 接口的实现必须实现接口的全部方法,否则必须定义为抽象类
  • 一个借口可以被不同的类实现
class Write implements GoodJob{
@Override
public void write(){
System.out.println("write write write");
}
}

抽象类

抽象类是一种抽象能力弱于接口的类,关键词是abstract,如果接口是狗这个物种,抽象类可以说毛发是白色、狗的品种,而实现类可以是具体的类,比如是博美、拿破仑等。

public interface Dog {
void FurColor();
}

abstract class WhiteDog implements Dog{
public void FurColor(){
System.out.println("Fur is white");
}
abstract void SmallBody();
}

在抽象类中

  • 如果一个类中有抽象方法,那么这个类一定是抽象类,也就是说,使用关键字abstract修饰的方法一定是抽象方法,具有抽象方法的类一定是抽象类
  • 实现类方法中只有方法具体的实现
  • 抽象类中不一定只有抽象方法,抽象类中也可以有具体的方法,你可以自己去选择是否实现这些方法
  • 抽象类中的约束不像接口那么严格,你可以在抽象类中定义构造方法、抽象方法、普通属性、方法、静态属性和静态方法
  • 抽象类和接口一样不能被实例化,实例化只能实例化具体的类