黑马程序员技术交流社区
标题:
接口与抽象类的有什么区别?
[打印本页]
作者:
周金帅
时间:
2012-5-30 17:12
标题:
接口与抽象类的有什么区别?
接口都可以用抽象类表达出来吧,那java中为什么还要弄个接口呢?用法差不多啊,有没有本质的区别啊?
作者:
黑马张健
时间:
2012-5-30 17:17
抽象类
当多个类中出现相同功能,但是功能主体不同。
这是可以进行向上抽取。这时,抽取功能定义,而不抽取功能主体。
抽象类的特点:
1. 抽象方法一定在抽象类中。
2. 抽象方法和抽象类都必须被abstract关键子修饰。
3. 抽象类不可以用new创建对象,因为调用抽象方法没意义。
4. 抽象类中的方法要被使用,必须由子类复写其所有的抽象方法后,建立子类对象调用。
5. 如果子类只覆盖了部分抽象方法,那么该子类还是一个抽象类。
6. 抽象类里面即可以有抽象方法,也可以有非抽象方法。
7. 抽象类中可以不定义抽象方法。
接口
接口:初期理解,可以认为是一个特殊的抽象类。
当抽象类中的方法都是抽象的,可以用接口来描述。
接口定义时,格式特点:
1. 接口中常见定义:常量,抽象方法。
2. 接口中的成员都有固定的修饰符。
常量:public static final
方法:public abstract
3. 接口中的成员都是public
接口:是不可以创建对象的,因为有抽象方法。
需要被子类实现,子类对接口中的抽象方法全都覆盖后,子类才可以实例化。
否则子类是一个抽象类。
接口可以被类多实现。一个类可以实现多个接口。
接口是对外暴露的规则。
接口是程序的功能扩展。
接口可以用来多实现。
类与接口之间是实现关系,而且类可以继承一个类的同时,实现多个接口。
接口和接口之间可以有继承关系。
作者:
丰亚彬
时间:
2012-5-30 17:17
抽象类是和需要继承的那个类有关系的,比如学生继承人。
而接口的应用范围要比抽象类广的多,它多数会定义一些特性内容,可以和实现它的类没有子父联系
比如在人这个类中可以定义人必须有的,学生继承了,没错~~但是有的学生抽烟,但是我不能在人这个抽象类里面定义,因为不是每个人都抽烟,所以用接口定义一个抽烟的方法,谁抽烟谁就实现这个接口(特有功能)
作者:
黑马—陈磊
时间:
2012-5-30 17:22
贴出我自己收集的总结:
Java接口和Java抽象类最大的一个区别,就在于Java抽象类可以提供某些方法的部分实现,而Java接口不可以,这大概就是Java抽象类唯一的优点吧,但这个优点非常有用。
如 果向一个抽象类里加入一个新的具体方法时,那么它所有的子类都一下子都得到了这个新方法,而Java接口做不到这一点,如果向一个Java接口里加入一个 新方法,所有实现这个接口的类就无法成功通过编译了,因为你必须让每一个类都再实现这个方法才行,这显然是Java接口的缺点。
一个抽象类的实现只能由这个抽象类的子类给出,也就是说,这个实现处在抽象类所定义出的继承的等级结构中,而由于Java语言的单继承性,所以抽象类作为类型定义工具的效能大打折扣。
在这一点上,Java接口的优势就出来了,任何一个实现了一个Java接口所规定的方法的类都可以具有这个接口的类型,而一个类可以实现任意多个Java接口,从而这个类就有了多种类型。
作者:
刘伯阳
时间:
2012-5-30 17:30
抽象类中的抽象方法需要其子类实现,也就是说需要继承。而我们知道Java是不支持多继承的,但是可以实现多个接口。所以有时候,接口的作用是非常大的。
作者:
王超
时间:
2012-5-30 17:38
1,在abstract class在Java语言中表示的是一种继承关系,其抽象方法需要子类实现,并且一个类只能使用一次继承关系。但是,一个类却可以实现多个interface。
2,在abstract class中,类可以有自己的数据成员,也可以有非abstarct的成员方法,而在interface方式的实现中,类只能够有静态的不能被修改的数据成员,所有的成员方法都是abstract的。
作者:
凡延海
时间:
2012-5-30 17:52
前边几楼已经回答的很详细了。我总结的呢就是不同点在两方面:
第一是:在构造形式上不同,抽象类中可以有非抽象方法,而接口中必须都是public的抽象类方法。
第二是:在用处上不同,继承抽象方法只能用extends继承一个,而实现接口可以implements多个接口。
我在加上了例子更生动的体现接口与抽象类:
abstract class Person{
public abstract void eat();
void say()
{
System.out.println("Hello");
}
}
interface Person{
void eat();
void say();
}
复制代码
作者:
袁野
时间:
2012-5-30 19:04
简单的说,他们俩的共性,都是重子类中抽取出来的。
抽象类的方法可以是抽象的也可以不是抽象的,
接口:作为扩展的。方法是抽象的,属性都是常量。
如何用接口和抽象类。看你在程序中需要哪个
作者:
付信榕
时间:
2012-5-30 19:49
也可以这样理解:抽象类是某一类事物抽取出来的共性东西,继承抽象类都要复写抽象类中抽象的方法,在复写中,不同的子类有不同的方法主体;而接口是一种协议,双方共同遵循的一种规则,能够增加扩展性。
作者:
程序猿
时间:
2012-5-30 19:58
首先抽象类是一个类,接口不是类,java的机制规定,一个类只能继承一个类,而一个类可以实现多个接口。
区别二,接口不能实现方法,且接口中的方法都是抽象的。抽象类中的方法可以有抽象的也可以有非抽象的。
区别三,子类必须实现接口的所有方法。继承抽象类必须覆写抽象类的抽象方法,非抽象方法可以不覆写
作者:
whocases
时间:
2012-5-31 21:02
抽象类的成员可以具有访问级别,而接口的成员全部public级别
抽象类可以包含字段,而接口不可以,
抽象类可以继承接口,而接口不能继承抽象类
抽象类的成员可以具有具体实现,而接口不行
抽象的子类可以选择性实现其基类的抽象方法,而接口的子类必须实现
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2