欢迎各界计算机爱好者加入,弘扬极客精神!

JAVA中接口和抽象类的区别

0 喜欢 0 不喜欢
问题关闭原因: 回答数多
最新提问 9月 13, 2016 分类:Java | 用户: 巫毒术 (100 分)  
已关闭 9月 14, 2016 用户:leisure

7 个回答

1 喜欢 0 不喜欢
  • 简单来说,
  • 接口是公开的,里面不能有私有的方法或变量,是用于让别人使用的,而抽象类是可以有私有方法或私有变量的,
  • 另外,实现接口的一定要实现接口里定义的所有方法,而实现抽象类可以有选择地重写需要用到的方法,一般的应用里,最顶级的是接口,然后是抽象类实现接口,最后才到具体类实现。
  • 还有,接口可以实现多重继承,而一个类只能继承一个超类,但可以通过继承多个接口实现多重继承,接口还有标识(里面没有任何方法,如Remote接口)和数据共享(里面的变量全是常量)的作用.
最新回答 9月 13, 2016 用户: Megan (2,582 分)  
重新显示 9月 14, 2016 用户:leisure
0 喜欢 0 不喜欢

抽象方法:仅有定义,没有具体实现的方法
抽象类:含有抽象方法的类
一个类如果被定义为抽象类,它就不能被实例化,也就是说,不能有自己的对象

声明接口使用关键字“interface”
接口中一般只包含一组public抽象方法(且必须是公有抽象方法,但方法定义中public abstract可省略),也可以包含public 静态final数据
Java不允许一个子类继承多个超类,却允许一个子类继承一个超类并实现多个接口.

最新回答 9月 13, 2016 用户: 称霸幼稚园灬 (1,644 分)  
0 喜欢 0 不喜欢

声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态方法。Abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。 接口(interface)是抽象类的变体。在接口中,所有方法都是抽象的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽象的,没有一个有程序体。接口只可以定义static final成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对象上调用接口的方法。由于有抽象类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到接口类型或从接口类型转换,instanceof 运算符可以用来决定某对象的类是否实现了接口。
最新回答 9月 13, 2016 用户: Momo (6,446 分)  
1 喜欢 0 不喜欢

抽象方法必须用abstract关键字进行修饰。如果一个类含有抽象方法,则称这个类为抽象类,抽象类必须在类前用abstract关键字修饰。因为抽象类中含有无具体实现的方法,所以不能用抽象类创建对象。

接口中可以含有 变量和方法。但是要注意,接口中的变量会被隐式地指定为public static final变量(并且只能是public static final变量,用private修饰会报编译错误),而方法会被隐式地指定为public abstract方法且只能是public abstract方法(用其他关键字,比如private、protected、static、 final等修饰会报编译错误),并且接口中所有的方法不能有具体的实现,也就是说,接口中的方法必须都是抽象方法。从这里可以隐约看出接口和抽象类的区别,接口是一种极度抽象的类型,它比抽象类更加“抽象”,并且一般情况下不在接口中定义变量。

最新回答 9月 13, 2016 用户: ly (4,874 分)  
0 喜欢 0 不喜欢

抽象方法是必须实现的方法。就象动物都要呼吸。但是鱼用鳃呼吸,猪用肺呼吸。

动物类要有呼吸方法。怎么呼吸就是子类的事了。
现在有很多讨论和建议提倡用interface代替abstract类,两者从理论上可以做一般性的混用,但是在实际应用中,他们还是有一定区别的。抽象类一般作为公共的父类为子类的扩展提供基础,这里的扩展包括了属性上和行为上的。而接口一般来说不考虑属性,只考虑方法,使得子类可以自由的填补或者扩展接口所定义的方法,就像JAVA王子所说的事件中的适配器就是一个很好的应用。
用一个简单的例子,比如说一个教师,我们把它作为一个抽象类,有自己的属性,比如说年龄,教育程度,教师编号等等,而教师也是分很多种类的,我们就可以继承教师类而扩展特有的种类属性,而普遍属性已经直接继承了下来。
而接口呢~还是拿教师做例子,教师的行为很多,除了和普通人相同的以外,还有职业相关的行为,比如改考卷,讲课等等,我们把这些行为定义成无body的方法,作为一个集合,它是一个interface。而教师张三李四的各自行为特点又有不同,那么他们就可以扩展自己的行为body。从这点意义上来说, interface偏重于行为。
总之,在许多情况下,接口确实可以代替抽象类,如果你不需要刻意表达属性上的继承的话。

最新回答 9月 13, 2016 用户: Parsifal (1,714 分)  
0 喜欢 0 不喜欢
接口中的方法只能是定义不可以有实现,而且所有成员默认均为公有的,实现接口时必须实现该接口定义的所有方法。接口可以多重继承。而抽象类中则可以存在私有成员,方法允许有实现,继承抽象后可以不去实现该抽象类的抽象方法,但此时该子类也必须声明为抽象类。抽象类不能多重继承
最新回答 9月 14, 2016 用户: tenderness (3,894 分)  
0 喜欢 0 不喜欢
http://zhidao.baidu.com/question/16706168.html

希望这个链接对你有帮助

最新回答 9月 14, 2016 用户: ぴ漏網ず嘀渔 (2,006 分)  
...