两者相似之处在于:抽象类和接口都不能被实例化,两种都是java实现抽象的方式。不同之处分两个方面:
一、语法层面
-
抽象类可以有构造方法,接口中不能有构造方法;
-
抽象类中可以有普通成员变量,接口中没有普通成员变量(默认public static final
);
-
抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的;
-
抽象类中的抽象方法的可以是public,protected的,但接口中的抽象方法只能是public的;
-
抽象类中可以包含静态方法,接口中不能包含静态方法
-
抽象类中可以包含任意访问权限的静态成员变量,但接口中定义的变量只能是public static final类型。
-
一个类可以实现多个接口,但只能继承一个抽象类。
二、思想层面
抽象类
在Java中体现了一种继承关系,要想使得继承关系合理,
抽象类
和派生类之间必须存在“is-a”关系,即
父类和子类在概念本质上应该是相同的。对于interface来说则不然,并不要求
interface的实现类和interface定义在概念本质上是一致的,仅仅是实现了interface定义的契约(模版)而已。
总结来说:
抽象类与子类为"is a"关系,它抽象出事物的共同本质特征,可单一继承;
接口与实现类为"like a"关系,它定义并规范了个性化的功能特征,可多重继承(实现)。
thinking in java中有个经典的关于门的例子,可以网上搜索看一下。
分享到:
相关推荐
简述抽象类和接口的区别-java接口和抽象类异同.docx
该资源对接口与抽象类作了详细分析与比较,相信你看了之后,会彻底的明白了,java学习更上一层楼
抽象类是否可实现(implements)接口? 抽象类是否可继承实体类(concrete class)? 12 41、Java 的接口和C++的虚类的相同和不同处。 12 42、一个“.java”源文件中是否可以包含多个类(不是内部类)?有什么限制? 12 ...
* [面向对象和面向过程的... * [接口与抽象类的区别](#接口与抽象类的区别) * [Object类的方法有哪些?](#object类的方法有哪些) * [静态属性方法和成员属性方法区别](#静态属性方法和成员属性方法区别) * [子类属性
JAVA面向对象思维导图,便捷整理思路,包、类、Object、JAVA Bean的一般写法、接口、抽象类、接口与抽象类的异同点
抽象类与接口的异同 抽象类和接口都不能够实例化,但可以定义抽象类和接口类型的引用。 一个类如果继承了某个抽象类或者实现了某个接口都需要对其中的抽象方法全部进行实 现,否则该类仍然需要被声明为抽象类。 ...
接口(interface)是抽象类的变体。在接口中,所有方法都是抽象的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽象的,没有一个有程序体。接口只可以定义static final成员变量。接口的实现与子类...
简述synchronized和java.util.concurrent.locks.Lock的异同 ? 34.EJB规范规定EJB中禁止的操作有哪些? 35.java除了8种基本类型外,在虚拟机里还有哪一种,有什么作用? 36.除了使用new关键字创建对象意外,试列举...
多线程有两种实现方法,分别是继承Thread类与实现Runnable接口 同步的实现方面有两种,分别是synchronized,wait与notify 4、String 和StringBuffer的区别 JAVA平台提供了两个类:String和StringBuffer,它们可以...
辨别抽象类与接口的异同点。 清楚如何通过向上转型(引用的隐式转型),方法重写,运行期绑定来实现多态性。 体会多态性如何使系统可扩展和可维护。 理解运行时判定引用对象的类型...
Q0058 一个Java抽象类声明了一个方法并会抛出一个异常,问继承这个抽象类的子类,实现了这个方法,这个方法声明是不是一定要抛出一模一样的异常,可不可以不抛,或者抛出的异常比抽象类的异常范围大,或者小?...
5、运行时异常与一般异常有何异同? 异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误。java编译器要求方法必须声明抛出可能发生的非运行时异常,...
抽象类是否可实现(implements)接口? 抽象类是否可继承具体类(concrete class)? 抽象类中是否可以有静态的main方法? 15 21、写clone()方法时,通常都有一行代码,是什么? 15 22、面向对象的特征有哪些方面 15 23、...
接口和抽象类的异同点 重载(overload)和重写(overwrite)区别 StringBufferStringBuilderString区别 冒泡排序 选择排序 单例设计模式 常见的异常类型 Throws和Throw的区别 Final,Finally,finalize关键字的作用 ...
5、运行时异常与一般异常有何异同? 异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误。java编译器要求方法必须声明抛出可能发生的非运行时异常...
抽象类是否可实现(implements)接口? 抽象类是否可继承具体类(concrete class)? 抽象类中是否可以有静态的main方法? 16 21、写clone()方法时,通常都有一行代码,是什么? 16 22、面向对象的特征有哪些方面 17 23、...
抽象类是否可实现(implements)接口? 抽象类是否可继承具体类(concrete class)? 抽象类中是否可以有静态的main方法? 15 21、写clone()方法时,通常都有一行代码,是什么? 15 22、面向对象的特征有哪些方面 15 23、...
接口(interface)是抽象类的变体。在接口中,所有方法都是抽象的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽象的,没有一个有程序体。接口只可以定义static final成员变量。接口的实现与子类...
抽象类是否可实现(implements)接口? 抽象类是否可继承具体类(concrete class)? 抽象类中是否可以有静态的main方法? 15 21、写clone()方法时,通常都有一行代码,是什么? 15 22、面向对象的特征有哪些方面 15 23、...
抽象类是否可实现(implements)接口? 抽象类是否可继承具体类(concrete class)? 抽象类中是否可以有静态的main方法? 21、写clone()方法时,通常都有一行代码,是什么? 22、面向对象的特征有哪些方面 23、java中...