抽象类与接口

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的

其他类

只能继承一个抽象类

可以实现多个接口

应用场景

 代码重用 模块之间通信契约

 

 

 

 

 

 

 

 

 

 

posted on 2017-12-26 01:47  Honey_Badger  阅读(311)  评论(0编辑  收藏  举报

导航

github