1. 基本概念
用abstract修饰的类是抽象类。如果类中有方法是abstract类型的,那么此类肯定是abstract类型的,也就是说此类的修饰符肯定有abstract(也就是说,有抽象方法的类是抽象类)。抽象类是不完整的,只能作为基类,且不能够实例化。
2. 与类进行比较
抽象类不能够实例化,并且对抽象类直接使用new运算符会导致编译错误。
允许抽象类中包含抽象方法或者变量。
抽象类不能是private的。
3. 和接口比较
不同点:
抽象类能够有实现了的方法,接口不能有。
类可以实现无数个接口,但只能继承一个抽象类(或者其他类),抽象类派生的类扔可以实现接口,从而得出接口是用来解决多重继承的问题的。
抽象类当中可以存在非抽象的方法,可接口不能,且它里面的方法只是一个声明必须用public来修饰没有具体实现的方法。
抽象类中的成员变量可以被不同的修饰符来修饰,可接口中的成员变量默认的都是静态常量(static final)。
抽象类是对象的抽象,然而接口是一种行为规范。
相似点:
都不能实例化。
都可以包含未实现的方法声明。
派生类必须实现未实现的方法,其中抽象类是抽象方法,接口是所有成员。
Tip:
1. implements的声明的方法里面不能使用private来修饰方法。
2. abstract class 在 Java 语言中表示的是一种继承关系,一个类只能使用一次继承关系。但是,一个类却可以实现多个interface。
3. 实现抽象类和接口的类必须实现其中的所有方法。抽象类中可以有非抽象方法。接口中则不能有实现方法。
4. 接口中定义的变量默认是public static final 型,且必须给其初值,所以实现类中不能重新定义,也不能改变其值。
5. 接口中的方法默认都是 public,abstract 类型的
6. 接口可以继承接口(使用extends语句);抽象类可以实现接口;抽象类可以继承实体类。抽象类不需要实现接口的全部方法。
7. 很有意思的地方:抽象类继承接口,然后实体类继承抽象类,发现不需要实现最开始的接口定义的方法。于是乎,接口定义的方法,在实体类实现的时候成为了抽象方法的存在。不过根据Tip5可以得知,是这样的。