1.抽象类可以有构造方法,接口没有构造方法
Multiple markers at this line
- Interfaces cannot have constructors
- Syntax error on token "}", delete this
token
2.一个子类只能继承一个抽象类,但能实现多个接口
java不支持多重继承
3.抽象类可以有普通成员变量,接口没有普通成员变量
成员变量(在类中定义, 访问修饰符 修饰符 type name = value)
Abstract methods do not specify a body
4.抽象类和接口都可有静态成员变量,抽象类中静态成员变量访问类型任意,接口只能public static final(默认)
5.抽象类可以没有抽象方法,抽象类可以有普通方法,接口中都是抽象方法
抽象类和普通类的区别就在于,抽象类不能被实例化,就是不能被new出来,即使抽象类里面没有抽象方法。
抽象类的作用在于子类对其的继承和实现,也就是多态;
而没有抽象方法的抽象类的存在价值在于:实例化了没有意义,因为类已经定义好了,不能改变其中的方法体,但是实例化出来的对象却满足不了要求,只有继承并重写了他的子类才能满足要求。所以才把它定义为没有抽象方法的抽象类
接口:无论你加不加abstract,所有实现指定接口的类都必须重写并实现该接口的所有方法
6.抽象类可以有静态方法,接口不能有静态方法
java8接口中可以有default类型的方法,实现类可以选择实现该方法。
jdk8已经支持接口加入静态方法,但据说是为了lambda(函数式编程)
详情:http://www.oracle.com/webfolder/technetwork/tutorials/obe/java/Lambda-QuickStart/index.html#section1
7. 抽象类中的方法可以是public、protected;接口方法只有public
附
特点 |
抽象类 |
接口 |
构造方法 |
有 |
无 |
普通成员变量 |
有 |
无 |
普通方法 |
可以有非抽象的 |
必须是抽象的 |
抽象方法的访问类型 |
public、protected和默认 |
只能是public的,默认public abstract |
静态方法 |
可以有 |
无 |
静态成员变量 |
有 |
有 public static final的 |
其他类 |
只能继承一个抽象类 |
可以实现多个接口 |
应用场景 |
代码重用 | 模块之间通信契约 |