【转载】抽象类与接口的区别_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > 【转载】抽象类与接口的区别

【转载】抽象类与接口的区别

 2013/8/18 21:29:35  Relaxy  程序员俱乐部  我要评论(0)
  • 摘要:现在好多公司的面试题都会问到这个题目,一般问到这个问题,有时候一时想不出来该怎么表述,下面我就给大家好好讲下其中的关系。含有abstract修饰符的class即为抽象类,abstract类不能创建的实例对象。含有类不能创建的实例对象。含有abstract方法的类必须定义为abstractclass类中定义抽象方法必须在具体子类中实现,所以,不能有抽象构造方法或静态方法。如果的子类没实现父中所有抽象方法,那么子类也必须定义为abstract类型。接口(interface
  • 标签:区别 接口 抽象

现在好多公司的面试题都会问到这个题目,一般问到这个问题,有时候一时想不出来该怎么表述,下面我就给大家好好讲下其中的关系。

?????? 含有 abstract修饰符的 class即为抽象类, abstract 类不能创建的实例对象。含有类不能创建的实例对象。含有abstract方法的类必须 定义为 abstract class类中定义抽象方法必须在具体子类中实现, 所以,不能有抽象构造方法或静态方法。如果的子类没实现父中所有抽象方法,那么子类也必须定义为abstract类型。
?????? 接口(interface)可以说成是抽象类的 一种特例,接口中所有方法都必须是抽象的。接口中的方法默认定义为public abstract类型, 接口中的成员变量类型默认为public static final。
下面比较一两者的语法区别:
???? 异同点:

??? 1).抽象类可以有实现(包括构造函数),而接口不可以有任何实现,重要的是抽象类可以包括抽象方法,这是普通类所不能的。抽象方法只能声明于抽象类中,且不包含任何实现,派生类必须覆盖它们。接口中所有方法都必须是未实现的。
??? 2).抽象类中还以有成员变量(包含静态成员变量)、属性、常量和静态方法,并且他们可以是非公共的;而接口中不能有成员变量、常量、静态方法,只能有公共的属性。
??? 3).抽象类可以从另一个类或者一个/ 多个接口派生;而接口不能从另一个类派生却可以实现另一个或多个接口

??? 相同点:

?????? 1)、不能实例化;
?????? 2)、包含未实现的方法声明;
?????? 3)、派生类必须实现未实现的方法,抽象类是抽象方法,接口则是所有成员(不仅是方法包括其他成员);
?
??????? 下面用简单的案例来看下:

??????? 抽象类:

?
Java代码?
1.public abstract class TestCXL {?
2.?
3.??? /**
4.???? * 抽象类中还以有成员变量(包含静态成员变量)
5.???? * 并且他们可以是非公共的,比如private,也可以是public
6.???? */?
7.??? private static String cxl1 = "CXL1";?
8.??? private String cxl2 = "CXL2";?
9.?????
10.??? /**
11.???? * 构造方法
12.???? */?
13.??? public TestCXL() {?
14.??????? super();?
15.??? }?
16.?
17.??? /**
18.???? * 抽象类可以有实现(包括构造函数)
19.???? * @return
20.???? */?
21.??? public String method1(){?
22.??????? return "method1";?
23.??? }?
24.?????
25.??? /**
26.???? * 抽象类中还可以有静态方法
27.???? * @return
28.???? */?
29.??? public static String method2(){?
30.??????? return "method2";?
31.??? }?
32.?????
33.??? /**
34.???? * abstract class 和 interface有什么异同?
35.???? */?
36.?????
37.??? /**
38.???? * 抽象类可以包括抽象方法,这是普通类所不能的
39.???? * 抽象方法只能声明于抽象类中,且不包含任何实现,派生类必须覆盖它们
40.???? * @return
41.???? */?
42.??? public abstract String method3();?
43.?????
44.??? /**
45.???? * 相同点:1)、不能实例化;
46.?????? 2)、包含未实现的方法声明;
47.?????? 3)、派生类必须实现未实现的方法,抽象类是抽象方法,接口则是所有成员(不仅是方法包括其他成员);
48.
49.抽象类和接口的使用:
50.????? 1)如果预计要创建组件的多个版本,则创建抽象类。抽象类提供简单的方法来控制组件版本。
51.????? 2)如果创建的功能将在大范围的全异对象间使用,则使用接口。如果要设计小而简练的功能块,则使用接口。
52.????? 3)如果要设计大的功能单元,则使用抽象类.如果要在组件的所有实现间提供通用的已实现功能,则使用抽象类。???
53.????? 4)抽象类主要用于关系密切的对象;而接口适合为不相关的类提供通用功能。
54.???? */?
55.?????
56.}??
?接口:
?
?
Java代码?
1.<strong>public interface TestJK {?
2.?
3.??? /**
4.???? * 接口中不能有成员变量、常量、静态方法,只能有公共的属性。
5.???? */?
6.?????
7.??? public static String ss = "SS";?
8.?????
9.??? /**
10.???? * 接口不可以有任何实现
11.???? * 接口中所有方法都必须是未实现的
12.???? * @return
13.???? */?
14.??? public String method1();?
15.?????
16.}?
17.</strong>?

???? 派生类:

Java代码?
1.public class TestCXLPC extends TestCXL{?
2.?
3.??? /**
4.???? * 重写/铺盖父类 的抽象方法
5.???? */?
6.??? @Override?
7.??? public String method3() {?
8.??????? // TODO Auto-generated method stub?
9.??????? return null;?
10.??? }?
11.?
12.}?

原文地址:http://z-xiaofei168.iteye.com/blog/1925135

?

上一篇: struts2 注解 使用拦截器判断用户是否登录 下一篇: 没有下一篇了!
发表评论
用户名: 匿名