接口和抽象类
一、接口
接口相当于对外的一种约定和标准,比如为什么有操作系统,操作系统能屏蔽软件的复杂性和硬件的简单性之间的差异,为软件提供统一的标准。
在Java中,接口使用interface关键字来表示,比如我们可以定义这样一个接口:
1 package day04; 2 3 4 5 public interface Job { 6 7 void writeWell(); 8 9 }
比如定义了Job接口,就可以在内部定义需要做的事情。接口的特征如下:
- Interface接口是一个完全抽象的类,不会提供任何方法的实现,只会进行方法的定义。
- 接口中只能使用两种访问修饰符,一种是public,表示它对整个项目可见;一种是default缺省值,它表示只具有包访问权限。
- 接口只提供方法的定义,接口没有实现,但是接口可以被其他类实现。意思是接口的类需要提供方法实现接口,实现使用implements关键字表示,一个接口可以有多种实现。
【Demo.java】
1 package day04; 2 3 4 5 class YangWriteWell implements Job { 6 7 @Override 8 9 public void writeWell() { 10 11 System.out.println("Yang write is vary well!"); 12 13 } 14 15 } 16 17 18 19 class GaoWriteWell implements Job { 20 21 @Override 22 23 public void writeWell() { 24 25 System.out.println("Gao write is vary well!"); 26 27 } 28 29 }
【job.java】
1 package day04; 2 3 4 5 public interface Job { 6 7 void writeWell(); 8 9 }
- 接口不能被实例化,所以接口不能有构造方法,定义构造方法会出错。
- 接口的实现比如实现接口的全部方法,必须定义为抽象类
二、抽象类
抽象类是一种抽象能力弱于接口的类,在Java中使用abstract关键字表示。如果把接口形容为狗,那抽象类可以理解为毛发是白色、小体的品种,而实现类可以是具体的类比如牧羊、泰迪等。
1 package day04; 2 3 4 5 public interface Dog { 6 7 void FurColor(); 8 9 } 10 11 12 13 abstract class BlackDog implements Dog { 14 15 public void FurColor() { 16 17 System.out.println("Fur is black"); 18 19 } 20 21 22 23 abstract void SmallBody(); 24 25 }
抽象类的特征如下:
- 如果一个类中有抽象方法,那么这个类一定是抽象类,也就是用abstract修饰的方法一定是抽象方法,具有抽象方法的一定是抽象类。实现类只有具体方法的实现。
- 抽象类中不一定有抽象方法,抽象类也能有具体的方法,这个根据实际情况确定。
- 抽象类中的约束不像接口那么严格,可以在抽象类中定义构造方法、抽象方法、普通属性、方法、静态属性和静态方法。
- 抽象类和接口一样都不能实例化,实例化只能实例化具体的类。
欢迎批评指正,提出问题,谢谢!