菜鸟程序员的成长日记3
Java面试:请你简单谈谈抽象类
细节:
- 抽象类不能被实例化
- 抽象类不一定要包含抽象方法,也就是说抽象类可以没有抽象方法
- 一旦包含了抽象方法,则这个类必须声明为抽象类
- abstract只能修饰方法和类,不能修饰属性和其他
- 抽象类可以有任意成员【抽象类本质还是类】,比如:非抽象方法、构造器、静态属性等等
- 抽象方法不能有方法体
- 如果一个类继承了抽象类,则它必须实现抽象类的所有抽象方法,除非他自己也声明为抽象类
对此延伸出一个问题,抽象类和接口的区别:
抽象类和接口的区别
- 抽象类中可以有普通成员变量、可以有构造函数、可以包含静态方法,接口不可以
- 抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的,不能有非抽象的普通方法
- 抽象类中的抽象方法的访问类型可以是 public,protected ,但接口中的抽象方法只能是 public 类型的,并且默认即为 public abstract 类型
- 一个类可以实现多个接口,但只能继承一个抽象类
- 抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,但接口中定义的变量只是public static final 类型,并且默认即为 public static final 类型。