类是实例的抽象,抽象类是类的抽象,接口式抽象类的抽象
1:实例可以看成是现实世界中的实体对象,如一辆特定的汽车,一本特定的书等
2:类是实例的抽象:类是现实世界中实体对象的抽象,通过一个类可以实例化一个具体的对象,如宝马轿车,奔驰轿车等轿车可以抽象成一个轿车类,通过桥车类可以创建出奔驰轿车,宝马轿车等实例对象
3:抽象类是类的抽象:通过抽象类可以定义一个基本的类,如车类,可以定义车的基本组成(有轮胎,有发动机等等),轿车类通过继承车类(拥有了轮胎,发送机等),并实现车类的抽象方法(轮胎,发送机的实现),并且添加了自己作为轿车类的特性(高度,大小,轿车品牌等(注意:例子中车类的子类是小轿车,但也可以是大货车)),通过轿车类就可以创建出具体的轿车实例对象了(不同高度,大小,品牌的轿车),在java中,抽象类常用作父类,抽象类中有未实现的抽象方法,不同的的子类根据特定的需求自己实现这些抽象方法。当然实现这个操作也不一定需要使用抽象类,由于抽象类类似于接口,不可以直接创建实例(有未实现的抽象方法),所以也可以通过直接继承一个普通类,再重写普通类的方法来达到这个目的
4:接口是对抽象类的抽象:比如接口(交通工具)定义了一个drive()方法,抽象类可以实现该方法,如飞机类可以实现该方法(当然也可以通过子接口继承来代替抽象类实现接口),车类也可以实现该方法,并增加作为车类的主要组成,再通过轿车类继承车类,轿车类也一样增加定义自己作为轿车类的主要元素,最后通过轿车类我们就可以创建出诸如奔驰或者宝马,玛莎拉蒂等轿车实例对象了(当然,也可以大货车继承车类,同理添加自己作为大货车的特性,一样可以创建出具体的货车对象了)。在java中,接口常用作定义必不可少的方法,即实现类必须全部实现这些接口方法才可以称得上是这些接口的实现类。一般是普通类作为实现类,这些普通类有相同的规范(功能),然后根据业务的不同逻辑来实现这些功能。但是接口中也可以定义默认方法(jdk1.8之后),那么这些方法不强制在实现类中实现,若实现类中不实现,则会使用接口中默认方法的逻辑;当然接口一样可以被继承,子接口又可以添加一些新的规范(标准)
简而言之:交通工具(抽象层次最高:接口,只有一个标准,具有driver()方法)分为车,飞机等(抽象类),车又分为轿车,货车(类),轿车又分为奔驰,宝马,玛莎拉蒂,法拉利等(实例对象)
另外:如果抽象程度没有那么高,可以不需要设计这么多个层次,直接:接口==》类===》实例(目前常用),如交通工具==》地铁==》特定品牌的地铁,也可以直接 类==》实例(也是常用)
这些接口,抽象类等,实例等的设计实际就是对一个对象由抽象到具体的过程,目的是提高程序的可读性与可扩展性
最后再描述一下我对接口的理解,因为接口对于一个程序来说非常非常重要!!比如usb接口拥有数据传输功能,那手机可以通过usb数据线传输数据(usb数据线实现了数据传输接口),u盘也可以插入usb接口传输数据(u盘也实现了该数据传输的接口)
接口也可以看成是一种规范(想通过该接口进行数据传输,无论是哪个对象(u盘或者数据线)都要实现该接口的书籍传输功能),如想通过dao接口获取数据库信息,那么就要实现dao接口的查询方法,再如上面提高的交通工具接口,想要被称为交通工具,就要实现drive()方法(能开的东西才能称为交通工具嘛)