Java Interface and Abstraction

Posted xbamboo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java Interface and Abstraction相关的知识,希望对你有一定的参考价值。

本文引用资源申明:

http://blog.csdn.net/xw13106209/article/details/6923556

http://www.cnblogs.com/dolphin0520/p/3811437.html

http://www.tutorialspoint.com/java/java_abstraction.htm

 

1. 抽象类

关键词:abstract

定义:含有抽象方法的类,也可以有具体方法。

抽象方法:只有方法的声明,没有body。 用;结尾,没有{}。抽象类的抽象方法就是强制子类必须去实现的。

抽象类是为了继承而存在的。如果一个父类,它的某个方法在父类中实现出来没有任何意义,必须根据子类的需求具体进行不同的实现,那么可以将这个方法声明为abstract方法,父类标为abstract类。

不要去写一个具体类去继承另外一个具体类,这个设计会有很大问题。

抽象类和普通类的区别:

a:抽象方法必须为public或者protected

b: 抽象类不能用来创建对象(因为有抽象方法,不能实现)

c:如果一个类继承与一个抽象类,子类必须实现父类的抽象方法。如果子类不能实现,那么子类也要是abstract。

2. 接口

定一个接口: public interface Name{}

接口中只能定义方法,不能有方法的实现。也就是说,接口中的方法都是抽象方法,而且是public abstract方法。接口中的变量都是public static final变量。

3. 区别

(1)总体来讲:

可以认为接口是抽象类的一种,只是多了许多限定条件。

a:接口中不能有静态代码块以及静态方法,抽象类可以有。

b:接口中不能提供方法的实现细节(body),抽象类的具体方法可以提供body。

c: 接口中的成员变量只能是public stratic final的

但是也有很大的好处,因为

一个类只能继承一个抽象类,但是可以引用(implement)多个接口,用,(逗号)连接

(2)

抽象类是对整个类包括属性、行为进行抽象,但是接口是对类的行为进行抽象。

如果一个类继承了某个抽象类,那么子类一定属于抽象类的种类(比如民用飞机属于飞机,燕子属于鸟)。但是接口是具备这个行为与否的关系,比如飞机和鸟都可以引用 “飞”这个接口来实现“飞”这个行为。所以,继承(extend)是“是不是”的关系,接口是“有没有”的关系。

举个例子,我们可以把飞机、鸟作为抽象类,“飞”作为接口,让整个两个抽象类实现“飞”这个接口,那他们就有了“飞”这个行为。让民用飞机继承飞机这个抽象类,那个民用飞机就可以飞并且含有飞机的基本属于,同理,燕子也是一样。

(3)

对于抽象类,如果需要添加新的方法,可以直接在抽象类的更改。但是对于接口,如果接口更改,则所有实现这个接口的类都必须做相应的改动。因为如果向接口添加了一个新的方法,那么所有实现这个方法的类都不能通过编译,必须让每一个类都实现这个方法才行。

 

 

 

如何在子类中实现抽象类的抽象方法?如果在引用接口的类中实现接口的方法??需要添加例子

 

以上是关于Java Interface and Abstraction的主要内容,如果未能解决你的问题,请参考以下文章

JNDI(Java Naming and Directory Interface )

JNDI(Java Naming and Directory Interface )

spring+jax 出现java.io.Serializable is an interface, and JAXB can't handle interfaces

20175318 2018-2019-2 《Java程序设计》第5周学习总结

Tensorflow Eager execution and interface

abstract class and interface