黑马程序员技术交流社区
标题:
面试题 abstract修饰的抽象类与interface接口的区别
[打印本页]
作者:
HelloWorld_2013
时间:
2013-4-15 10:31
标题:
面试题 abstract修饰的抽象类与interface接口的区别
本帖最后由 田磊阳 于 2013-4-15 23:36 编辑
可能会在面试中出现。。
作者:
殇_心。
时间:
2013-4-15 10:49
1.抽象类里面可以有非抽象方法
但接口里只能有抽象方法 。
2.在类来继承抽象类时,只需实现部分具体方法和全部抽象方法,
而实现接口则要实现里面的全部方法。
3.在接口中无成员变量,
而抽象类中可有成员变量。
作者:
周音匀
时间:
2013-4-15 10:55
(1)相同点
A,两者都是抽象类,都不能实例化。
B,interface实现类及abstrct class的子类都必须要实现已经声明的抽象方法。
(2)不同点
A,interface实现,要用implements,而abstract class的实现,要用extends。
B,一个类可以实现多个interface,但一个类只能继承一个abstract class。
C,interface强调特定功能的实现,而abstract class强调所属关系。
D,尽管interface实现类及abstrct class的子类都必须要实现相应的抽象方法,但实现的形式不同。interface中的每一个方法都是抽象方法,都只是声明的(declaration, 没有方法体),必须要实现。而abstract class的子类可以有选择地实现。
作者:
mvplee
时间:
2013-4-15 10:59
这种面试题太没营养了!
作者:
Alan
时间:
2013-4-15 11:55
abstract 修饰的CLASS是抽象类 抽象类(abstract class)可以有抽象方法,也可以有具体是方法,抽象类只能支持单继承interface 接口 接口可以有抽象的方法,不存在具体的方法,接口可以多继承(多实现) 如下是我以前学习的一些笔记你可以参考下/*理解java接口定义 * 1.JAVA接口没有构造器 * 2.JAVA接口中的成员变量必须显式赋初始值 * 3.JAVA接口中的方法没有方法体,定义形式是[public][abstract] 方法类型 [方法名]([参数列表]); * 4.JAVA接口的定义形式如下: * [修饰符] interface 接口名[extends 父接口名列表]{ [public] [static] [final] 数据类型 成员变量名=变量值; [public][abstract] 方法类型 方法名([参数列表]); } * * 5.JAVA接口中的成员变量默认为public static final类型的,如inti=1; 相当于是public static final inti=1; * JAVA接口中常量默认是加了public static final 意味着:公用,共用,并且不可更改。 * 6.JAVA接口是不能被实例化的 * 7.JAVA接口中的方法不能用static修饰 * 8.JAVA接口中的所有的方法都是抽象的,不管有没abstract修饰,且默认是 public abstract 方法类型 方法名([参数列表]); * 9.JAVA接口中子接口可以继承多个父接口,子类可以实现多个父接口 * */ /*理解JAVA抽象类 * 1.抽象类不能被实例化. * 2.抽象类有构造器,且他的构造在他的子类被实例化时被调用的顺序和普通类调用的顺序是一样的(先父后子). * 3.抽象类内部的方法可以不是抽象方法,也就是说抽象类内部可以有具体的方法. * 4.抽象类的抽象方法属于一种不完整的方法,只含有声明和定义,没有方法主体. * 5.如果抽象的某个子类是普通类(非abstract类型的类),那么该子类必须Override抽象类中所有的抽象方法. * 6.抽象类的子类也是抽象类的话,那么该子类既可以Override父类中的方法,也可以不Override父类中的方法. * 7.普通类中不能定义抽象方法. * 8.static不能修饰抽象方法
作者:
刘永建
时间:
2013-4-15 12:43
抽象类(abstract)和接口(interface)的区别:
abstract 类 和接口类似,
抽象类中定义方法,只有方法名,但不包含主体,不包含实现,和接口一样,
可以把抽象方法当作没有具体实现的虚方法。
抽象类不能被实例化。这个接口一样,
抽象类中并非一定有抽象方法,但是 有抽象方法的类, 一定是抽象类。
派生类必须覆盖基类的抽象方法,(也就是子类去实现继承类中的方法)
抽象类中可以包含:属性、普通方法、可以包含虚方法、抽象方法
作者:
易杰
时间:
2013-4-15 15:24
有abstract修饰符的class即为抽象类,abstract类不能创建的实例对象。含有abstract方法的类必须定义为abstract class,abstract class类中的方法不必是抽象的。abstract class类中定义抽象方法必须在具体(Concrete)子类中实现,所以,不能有抽象构造方法或抽象静态方法。如果的子类没有实现抽象类中的所有抽象方法,那么子类也必须定义为abstract类型。 接口(interface)可以说成是抽象类的一种特例,接口中的所有方法都必须是抽象的。接口中的方法定义默认为public abstract类型,接口中的成员变量类型默认为public static final
。
下面比较一下两者的语法区别:
1.抽象类可以有构造方法,接口中不能有构造方法。
2.抽象类中可以有普通成员变量,接口中没有普通成员变量
3.抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的,不能有非抽象的普通方法。
4. 抽象类中的抽象方法的访问类型可以是public,protected和(默认类型
,虽然eclipse下不报错,但应该也不行),但接口中的抽象方法只能是public类型的,并且默认即public
abstract类型。
5. 抽象类中可以包含静态方法,接口中不能包含静态方法
6. 抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,但接口中定义的变量只能是public static final类型,并且默认即为public static final类型。
7. 一个类可以实现多个接口,但只能继承一个抽象类。
作者:
黄玉昆
时间:
2013-4-15 19:50
如果问题未解决,请继续追问,如果没有问题了,请将帖子分类 改为“已解决”,谢谢
作者:
冯超
时间:
2013-4-15 21:04
抽象类中可以有抽象方法,也可以没有抽象方法;
接口中必须都都是抽象方法,接口中的方法都是public权限而抽象类中可以不是;
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2