黑马程序员技术交流社区
标题:
abstract和interface
[打印本页]
作者:
黄锋
时间:
2011-10-14 08:53
标题:
abstract和interface
abstract class和interface有什么区别?
作者:
敖东
时间:
2011-10-14 09:06
含有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. 一个类可以实现多个接口,但只能继承一个抽象类
作者:
杨杰
时间:
2011-10-14 09:56
本帖最后由 杨杰 于 2011-10-14 10:00 编辑
http://topic.csdn.net/u/20070118/00/bd2d32bb-fef6-412d-a4f5-c1d1c58f650e.html
这里更详细
作者:
颜庭飞
时间:
2011-10-14 10:37
1.interface被继承时用的关键字是implements,而且可以同时implements多个interface,而abstract class被继承时用的关键字是extends,而且只能同时extends一个abstract class。
2.interface内定义的方法都是public的,而abstract class内的则不一定。
3.interface内定义的成员对象都是static & final的,而abstract class不是(一定不能是final)
4.interface的方法不能有默认实现,只有一个声明,而abstract class内声明abstract的方法不能有实现,非声明abstract的方法可以有默认实现。
5.interface被implements时,所有方法都必须被实现,必须申明是public的,而abstract class被extends时只有abstract的方法才必须被实现,别的有默认实现的直接被继承过来。
注:不能创建接口或抽象类的实例。
作者:
刘浩
时间:
2011-10-14 10:43
1.abstract class是抽象类,需要被继承。
interface 是接口,需要被实现。
2.抽象类可以定义抽象和非抽象方法,子而立可以继承过来并直接使用。
接口中全都是抽象方法。只能被子类去实现。
3.抽象类中只能单继承。
接口可以多实现。
4.继承关系是所属关系(比如:是A)
接口是(像A)的关系。
5.抽象类中定义的是一个体系中的共性基本功能。
接口中定义的是扩展功能。
作者:
chishibo
时间:
2011-10-14 17:11
声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态方法。Abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。
接口(interface)是抽象类的变体。在接口中,所有方法都是抽象的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽象的,没有一个有程序体。接口只可以定义static final成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对象上调用接口的方法。由于有抽象类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到接口类型或从接口类型转换,instanceof 运算符可以用来决定某对象的类是否实现了接口。
作者:
724681149
时间:
2011-10-15 00:58
简而言之,abstract中包含了interfac,也就是abstract中包含了为实现的方法,没有方法体,这个为实现的方法需要子类来实现。interface的存在意义就是程序功能的扩展。interface类内都是为实现的方法,无方法体。abstract类内部包括未实现的接口和有方法体的一般的方法。
“不知道,你明白了吗?我是明白了!”{:soso_e120:}。
作者:
潘永辉
时间:
2011-10-16 16:21
声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态方法。Abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。
接口(interface)是抽象类的变体。在接口中,所有方法都是抽象的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽象的,没有一个有程序体。接口只可以定义static final成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对象上调用接口的方法。由于有抽象类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到接口类型或从接口类型转换,instanceof 运算符可以用来决定某对象的类是否实现了接口。
作者:
吴限量
时间:
2011-10-16 20:27
本帖最后由 吴限量 于 2011-10-16 20:43 编辑
abstarct class 和Interface是Java语言中对于抽象类定义进行支持的两种机制.他们共同赋予了Java强大的面向对象能力.
最明显的区别就是编码.
abstarct class Demo
{
abstract void one();
abstract void two();
}
interface Demo
{
void one();
void two();
}
在abstarct class 方式中.Demo可以有自己的数据成员,也可以有非abstarct的成员方法.而interface方法中,Demo只能够静态的不能修改的数据成员.
作者:
陈林阳
时间:
2011-10-17 20:07
接口中变量都是用public static final 修饰的 函数都是public abstrict修饰的
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2