目录
1、抽象类
简言之,就是用abstract修饰的类
抽象类规定:
- 抽象类必须用public或procted 修饰(如果为private修饰,那么子类则无法继承,也就无法实现其抽象方法)。默认缺省为 public。
-
抽象类不能被实例化(初学者很容易犯的错),如果被实例化,就会报错,编译无法通过。只有抽象类的非抽象子类可以创建对象。
-
抽象类中可以包含非抽象方法,但是有抽象方法的类必定是抽象类。
-
抽象类中的抽象方法只是声明,不包含方法体,就是不给出方法的具体实现也就是方法的具体功能。
-
构造方法,类方法(用 static 修饰的方法)不能声明为抽象方法。
-
抽象类的子类必须给出抽象类中的抽象方法的具体实现,除非该子类也是抽象类。
-
抽象类可以有构造方法,但是不能用来直接实例化抽象类,实例化子类的时候,就会初始化父类,不管父类是不是抽象类都会调用父类的构造方法,初始化一个类,先初始化父类
总之,抽象类不能用private修饰,默认是public的,不能被实例化,子类必须实现抽象类的所有方法,要不子类也得被定义成抽象类,抽象类可以包含非抽象方法,也可以有构造方法
2、接口
接口(interface)是抽象方法和常量值的定义的集合
从本质上讲,接口是一种特殊的抽象类,这种抽象类中只包含常量和方法的定义,而没有变量和方法的实现
3、接口和抽象类的区别
(1)一个类可以实现多个接口,但只能继承一个抽象类
(2)抽象类中可以有非抽象方法,但接口中只能有抽象方法
(3)抽象类中的成员变量可以是任意类型的,而接口中的成员变量只能是public static final
(4)抽象类可以有构造方法,接口不能
(5)抽象类中可以有static方法和代码块,接口中不能