黑马程序员技术交流社区
标题:
abstract class和interface有什么区别?
[打印本页]
作者:
刘丽娜
时间:
2012-10-29 19:52
标题:
abstract class和interface有什么区别?
本帖最后由 刘丽娜 于 2012-10-30 19:46 编辑
抽象类和接口 都有哪些区别呢?
作者:
崔政
时间:
2012-10-29 20:02
这个我还真是刚看过,巧了。。
声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态方法。Abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。
接口(interface)是抽象类的变体。在接口中,所有方法都是抽象的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽象的,没有一个有程序体。接口只可以定义static final成 员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。然后,它可以 在实现了该接口的类的任何对象上调用接口的方法。由于有抽象类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到接口类型或从 接口类型转换,instanceof 运算符可以用来决定某对象的类是否实现了接口。
作者:
徐升兴
时间:
2012-10-29 20:09
本帖最后由 徐升兴 于 2012-10-29 20:13 编辑
抽象类可以看做是一个普通的类里面有抽象接口,用abstract修饰了,里面有抽象方法,也可以有普通方法,这个类不能实例化
接口里面全都是抽象方法,也不能实例化,也就是创建对象。如果实现接口,必须要覆盖接口里面的所有抽象方法,否则无法实现。
在用接口的时候还有一个小技巧就是匿名内部类,比如你定义了一个接口
但是在这个程序内,你这个接口只调用了一次,那么就可以定义一个匿名内部类来实现这个接口
new 接口名(){复写接口的方法}
接口的出现解决了java单继承的局限性
作者:
毕影彬
时间:
2012-10-29 20:09
抽象类只能被继承,所以,继承他的是他的子类。 接口是定义一种规则,实现接口的类,必须实现接口里的方法。而抽象类里,如果里面不是抽象方法,就不用实现,就直接继承过来了,可以直接使用。 一个是继承,一个是实现。 从面向对象和字面的意思,分析下,再看看抽象类和接口的使用方法。 就不难区分。
作者:
黑马吕世成
时间:
2012-10-29 20:35
可以实现多个interface。。。然而却只能继承一个abstract类,再实现接口的同事还可以继承别的类。我想这算是比较重要的一点。
作者:
种生祥
时间:
2012-10-29 20:57
抽象类可以有非抽象方法,接口里全都是抽象方法,接口可以实现多实现,这是对java只能单继承转换形式吧
作者:
李连闯
时间:
2012-10-29 21:11
抽象类除了类声明时的abstract修饰及抽象方法外其余的和普通类一样,接口来说只有抽象方法和public static final默认修饰的字段;
一个类只能继承一个抽象类,却可以同时实现多个接口;
抽象类与其派生类是继承的关系,父类和派生类之间存在"is a"的关系,即父类和派生类在概念本质上应该是相同的,
对于接口则并不要求与其实现类有什么本质上的关联。
作者:
邢晏玮
时间:
2012-10-30 01:32
接口是抽象类的一个特殊表现形式,接口中的方法全部为抽象方法,而抽象类中的方法不一定都是抽象方法,虽然说,接口和抽象类都要覆写其中的方法,但是如果你用到抽象类的时候,其中有一个不是抽象方法,你就可以继承后继续使用,而接口就不是,你要而且是必须全部覆写里面的全部方法!
作者:
刘丽娜
时间:
2012-10-30 19:47
谢谢各位的回答 明白了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2