抽象类与接口的区别
作者:张小飞 iteye账号:z_xiaofei168
现在好多公司的面试题都会问到这个题目,一般问到这个问题,有时候一时想不出来该怎么表述,下面我就给大家好好讲下其中的关系。
含有 abstract修饰符的 class即为抽象类, abstract 类不能创建的实例对象。含有类不能创建的实例对象。含有abstract方法的类必须 定义为 abstract class类中定义抽象方法必须在具体子类中实现, 所以,不能有抽象构造方法或静态方法。如果的子类没实现父中所有抽象方法,那么子类也必须定义为abstract类型。
接口(interface)可以说成是抽象类的 一种特例,接口中所有方法都必须是抽象的。接口中的方法默认定义为public abstract类型, 接口中的成员变量类型默认为public static final。
下面比较一两者的语法区别:
异同点:
1).抽象类可以有实现(包括构造函数),而接口不可以有任何实现,重要的是抽象类可以包括抽象方法,这是普通类所不能的。抽象方法只能声明于抽象类中,且不包含任何实现,派生类必须覆盖它们。接口中所有方法都必须是未实现的。
2).抽象类中还以有成员变量(包含静态成员变量)、属性、常量和静态方法,并且他们可以是非公共的;而接口中不能有成员变量、常量、静态方法,只能有公共的属性。
3).抽象类可以从另一个类或者一个/ 多个接口派生;而接口不能从另一个类派生却可以实现另一个或多个接口
相同点:
1)、不能实例化;
2)、包含未实现的方法声明;
3)、派生类必须实现未实现的方法,抽象类是抽象方法,接口则是所有成员(不仅是方法包括其他成员);
下面用简单的案例来看下:
抽象类:
public abstract class TestCXL { /** * 抽象类中还以有成员变量(包含静态成员变量) * 并且他们可以是非公共的,比如private,也可以是public */ private static String cxl1 = "CXL1"; private String cxl2 = "CXL2"; /** * 构造方法 */ public TestCXL() { super(); } /** * 抽象类可以有实现(包括构造函数) * @return */ public String method1(){ return "method1"; } /** * 抽象类中还可以有静态方法 * @return */ public static String method2(){ return "method2"; } /** * abstract class 和 interface有什么异同? */ /** * 抽象类可以包括抽象方法,这是普通类所不能的 * 抽象方法只能声明于抽象类中,且不包含任何实现,派生类必须覆盖它们 * @return */ public abstract String method3(); /** * 相同点:1)、不能实例化; 2)、包含未实现的方法声明; 3)、派生类必须实现未实现的方法,抽象类是抽象方法,接口则是所有成员(不仅是方法包括其他成员); 抽象类和接口的使用: 1)如果预计要创建组件的多个版本,则创建抽象类。抽象类提供简单的方法来控制组件版本。 2)如果创建的功能将在大范围的全异对象间使用,则使用接口。如果要设计小而简练的功能块,则使用接口。 3)如果要设计大的功能单元,则使用抽象类.如果要在组件的所有实现间提供通用的已实现功能,则使用抽象类。 4)抽象类主要用于关系密切的对象;而接口适合为不相关的类提供通用功能。 */ }
接口:
public interface TestJK { /** * 接口中不能有成员变量、常量、静态方法,只能有公共的属性。 */ public static String ss = "SS"; /** * 接口不可以有任何实现 * 接口中所有方法都必须是未实现的 * @return */ public String method1(); }
派生类:
public class TestCXLPC extends TestCXL{ /** * 重写/铺盖父类 的抽象方法 */ @Override public String method3() { // TODO Auto-generated method stub return null; } }
相关推荐
深入浅出的说明java抽象类与接口区别,让初学者更好的理解java抽象类与接口的概念
抽象类和接口 区别分析抽象类和接口 区别分析
java抽象类与接口实例java抽象类与接口实例java抽象类与接口实例java抽象类与接口实例java抽象类与接口实例java抽象类与接口实例java抽象类与接口实例java抽象类与接口实例java抽象类与接口实例java抽象类与接口实例...
Java中的类、抽象类和接口的区别和联系
在Java语言中,abstract class和interface 是支持抽象类定义的两种机制。正是由于这两种机制的存在,才赋予了Java强大的面向对象能力。abstract class和interface之间在对于抽象类定义的支持方面具有很大的相似性,...
JAVA 继承基本类、抽象类、接口区别与联系
java 抽象类与接口的区别
抽象类和接口的区别 在Java语言中, abstract class 和interface 是支持抽象类定义的两种机制。正是由于这两种机制的存在,才赋予了Java强大的 面向对象能力。abstract class和interface之间在对于抽象类定义的支持...
第7章 抽象类与接口.ppt第7章 抽象类与接口.ppt
C#中抽象类和接口的区别.txt
java 抽象类与接口的练习,包括代码及注释,个人笔记
抽象类和接口的区别 【概述】 一个软件设计的好坏,我想很大程度上取决于它的整体架构, 而这个整体架构其实就是你对整个宏观商业业务的抽象框架,当代表业务逻辑的高层抽象层结构 合理时, 你底层的具体实现...
(3) 抽象类可以但不是必须有抽象属性和抽象方法,但是一旦有了抽象方法,就一定要把这个类声明为抽象类 (4) 具体派生类必须覆盖基类的抽象方法 (5) 抽象派生类可以覆盖基类的抽象方法,也可以不覆盖。如果不覆盖,...
抽象类与接口 抽象类与接口 抽象类与接口 抽象类与接口
Abstractclass和interface是Java语言中对于抽象类定义进行支持的两种机制,正是由于这两种机制的存在,才赋予了Java强大的面向对象能力
1.继承及继承实例 2.方法重写(Overwrite) 3.super关键字 4.方法重载(Overload) 5.final修饰符 6.abstract修饰符 7.抽象类 8.接口 9.接口和抽象类对比 10.接口和抽象类使用场合实例 11.总结
详细介绍了dot Net中抽象类与接口的区别 3.1 相同点 • 都不能被直接实例化,都可以通过继承实现其抽象方法。 • 都是面向抽象编程的技术基础,实现了诸多的设计模式。 3.2 不同点 • 接口支持多...
Java抽象类与接口实验报告