我的学习笔记,每天进步一点点!有需要的可以看看,不喜勿喷,欢迎指正~
在面向对象中,对象是用类来描述的,但是并不是所有的类都是描述对象的。有的类是在一些类中抽象出来的概念,并不是具体的,也不能实例化出来。abstract class和interface是Java中对抽象概念进行定义的两种机制,他们两者之间对抽象概念的支持有很大的相似,甚至可以互换,但是也有区别。我们在使用的时候应该如何选取呢?通过一些对比了解下吧!
定义
抽象类:抽象类往往用来表征对问题领域进行分析、设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象。在java中,通常在编程语句中用 abstract 修饰的类是抽象类,含有抽象方法的类称为抽象类,不能生成对象。抽象类是不完整的,它只能用作基类。在面向对象方法中,抽象类主要用来进行类型隐藏和充当全局变量的角色。
特点: 1.不能被实例化;
2.抽象类中可以不包括抽象方法(没什么意义了);
3.可以有普通成员变量、普通方法(包括构造方法);
4.只要类中含有一个抽象方法(方法被abstract修饰),无论其他的方法是否是抽象的,该类都是抽象类;
5.不能有抽象构造方法和抽象静态方法(抽象类中所有的抽象方法都是由子类实现,这两个方法子类不能继承,所以子类不能实现);
一个测试小例子:
接口:接口和抽象类类似,只是接口中的所有方法都是抽象的,并不是从那些类抽象而来,而是自己设计出来,其他类实现继承他实现自己的功能。
特点:1.方法全部是抽象的,默认是public abstract类型(写不写都行);
2.接口中的所有成员变量默认为public static final类型(一般没什么用);
一个测试小例子:
上面的介绍大概明白了抽象类和接口的一些区别了,下面从它们的设计理念来介绍。
设计理念
1.抽象层次不同:抽象类是对类的抽象,而接口是对行为的抽象。抽象类是对整个类整体进行抽象,包括属性、行为,但是接口却是对类局部(行为)进行抽象。
2.跨领域不同:抽象类是“is-a”的设计,从子类中发现公共的,泛化成的一个类,子类完全包含父类的所有属性及行为,例如cat、dog都是动物,都有动物的一些属性,所以可以抽象为一个Animal类;接口洗“like-a”的设计,只要有共同的行为(只要能实现接口中的抽象方法的),不管它到底是什么,都可以,例如一个接口中是fly()方法,只要能实现它方法的都可以,飞机、鸟都可以。
3.设计层次不同:对于抽象类而言,它是自下而上来设计的,我们要先知道子类,然后从子类中提取他们相同的属性方法才能抽象出父类;而接口则不同,它是自上而下设计出来的,根本就不需要知道子类的存在,只需要定义一个方法即可。
小结
1.abstract class 在 Java 语言中表示的是一种继承关系,一个类只能使用一次继承关系。但是,一个类却可以实现多个interface;
2.抽象类中可以不包括抽象方法、可以有普通成员变量、普通方法,接口方法全部是抽象的,默认是public abstract类型、接口中的所有成员变量默认为public static final类型;
遇到这样的问题,想想它们的区别,勤于总结,理解更透彻!
相关文章
- 【Java学习笔记之二十九】Java中的"equals"和"=="的用法及区别
- 转:Java中abstract和interface的区别
- Java开发之abstract 和 interface的区别
- Objective-c学习之路:#import跟@class的区别,implementation和interface中声明变量的区别等等
- Objective-c学习之路:#import跟@class的区别,implementation和interface中声明变量的区别等等
- Java中abstract class 和 interface 的解释和他们的异同点(转)
- 11)Java abstract class 和 interface
- 【转载】java abstract class和interface的区别
- Java abstract class 和 interface 的区别
- [ 原创 ] Java基础5--abstract class和interface的区别