day09-抽象类-接口
一、抽象类
1、概念:
当描述一个类的时候,该类不需要具体的方法行为描述,我只需要知道该类有这个方法就可以了,不需要知道怎么具体实现时候,就可以将该方法定义成抽象方法,用abstract修饰该方法,具有抽象方法的类一定要声明成抽象类,也要用abstract修饰。
2.特点:
1) 不具体,看不明白,很抽象,但是知道一些大概的方法(知道是干什么的,但是不知道怎么干)。
2)抽象类中的抽象方法只需要定义,不需要实现(不需要方法体)。
3)抽象类不可以直接被实例化对象,也就是说不能直接像常规那样new一个对象。注意是直接。( 其实这是一个仁者见仁智者见智的问题,有些说内部类的实现算一个实例,有些说不算,所以 就看是不是直接创建实例了。)
4)子类继承抽象的父类后,只有全部实现了父类的抽象方法后,该子类才可以跟正常类一样的创建实例对象,否则该子类还是一个抽象类,还要用abstract修饰。
5)抽象类中可以有普通方法,因为抽象类跟普通的类没什么太大的区别,只是抽象类在描述某些事物的时候,有些方法或功能显的不具体,就将该方法定义抽象方法;同时也可以有构造函数(用于给子类初始化,子类的构造器中不断的向上调用 super( ),可以带参数)不影响。
二、接口
1、概念:接口是一系列抽象方法的集合,里面定义了很多抽象方法。用interface关键字修饰。
2、接口中的成员:抽象方法、全局变量
3、抽象方法是用public abatract 修饰的,不写默认有
4、接口中有抽象方法,说明接口不能被实例化对象,接口的实现类(相当于子类)必须全部实现接口中的抽象方法时候才可以创建实现类对象,否则该实现类还是一个抽象类。
5、接口与接口之间是继承关系用extends,类与接口之间是实现关系用implements,该类叫接口的实现类。
6、接口之间支持多继承,类与接口之间可以多实现。(一个类可以实现多个接口,java改良了多继承问题)。
7、一个类在继承父类后,还可以实现多个接口,这就易于扩展类的功能了。
三、抽象类与接口共性与区别
1、共性:
都定义了很多的抽象方法,子类(实现类)都是必须完全实现抽象方法后,才可以被实例化对象。
2、区别:
抽象类:一般定义的是一整个体系,从最顶层的抽象类开始,一直往下具体到每个子类。这是将下面的子类的共性内容不断的向上抽取的结果,就形成了抽象类。
接口:一般定义的是一组扩展的功能,是子类在继承父类后还需要一些额外的功能,为了程序的扩展性,不要轻易的去修改代码,这时候就可以定义接口来满足这需求。
具体区别:
(1)抽象类是类的一种,那么只支持单继承
(2)接口可以多继承,需要被实现,不被实现的接口就毫无用武之地