目录
一、什么是抽象类?
- 只有方法签名(方法名+参数),没有方法体的方法
- 抽象方法一般存在于抽象类中
- 有抽象方法的一定是抽象类
- 抽象类里不一定有抽象方法
- 抽象类可以有抽象方法,只需要声明,无需实现;抽象方法不能声明为静态的,不能被static、final修饰,所以抽象类不能实例化对象(也就是直接New对象);但是可以new后加“{ };”,然后在里面重写,会自动生成一个代理对象,如下所示:
- 抽象类需要被继承,是单继承
- 子类需要重写超类中的抽象方法
- 如果子类也是抽象类,那么可以不用重写
- 抽象类:抽取相同的行为和属性——向上造型
抽象类设计规则:
抽取派生类的共同属性和行为,如果子类的行为不是有一致的就写成抽象方法
二、接口——是一个特殊的抽象类
1、用Interface修饰,只有抽象方法和常量的引用数组类型
2、接口可以被多实现,implements用“,”逗号隔开。例如:Interface3 implements Interface0,Interface1,Interface2
3、接口不能被实列化(接口也不能直接New对象,和抽象类一样)
4、接口中只能有抽象方法,没有构造方法
5、接口里面只能有常量,并且不能私有化,默认是public static final型,且必须初始化,实现类中不能重新定义和修改值
6、接口可以被接口继承 ,可以是多继承。例如:Interface3 Extends Interface0,Interface1,Interface2
注意:先继承再实现
接口设计规则:
- 抽取派生类的共同属性和行为抽到超类中,
- 抽象类:如果子类方法都一样设计为普通方法,如果子类的行为不是有一致的就写成抽象方法
- 接口:抽取部分子类相同行为,抽取到接口中——多继承,多实现,接口是对单继承的扩展
三、抽象类和接口的区别与联系
1.抽象类和接口都不能被实例化;
2.抽象类使用abstract修饰,接口用Interface修饰;
3.抽象类是单继承,一个类只能使用一次继承关系,继承用关键字extends;
接口可以多继承(extends)多实现(interface),多实现的时候用逗号(,)隔开;
4.抽象类里面可以变量,变量可以私有化;
接口里只有常量,默认是public static final,不能被私有化,只能是公开的(public);
5.抽象类可以有抽象方法,只需要声明,无需实现;抽象方法不能声明为静态的,不能被static、final修饰;
接口里的方法都是抽象方法,但是都只是声明,并没有方法体,而且没有构造方法;
6.抽象类里面可以包含抽象方法和非抽象方法,抽象方法没有方法体,但是普通方法里面有方法体;有抽象方法的一定是抽象类,抽象类里不一定有抽象方法;一个类继承了抽象类,如果这个类实现了抽象类里面的所有抽象方法,那么该类可以不是抽象类,但是如果没有实现所有的抽象方法,那该类是抽象类