A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 周金帅 初级黑马   /  2012-5-30 17:12  /  2620 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

接口都可以用抽象类表达出来吧,那java中为什么还要弄个接口呢?用法差不多啊,有没有本质的区别啊?

10 个回复

倒序浏览
抽象类

当多个类中出现相同功能,但是功能主体不同。

这是可以进行向上抽取。这时,抽取功能定义,而不抽取功能主体。



抽象类的特点:

1.      抽象方法一定在抽象类中。

2.      抽象方法和抽象类都必须被abstract关键子修饰。

3.      抽象类不可以用new创建对象,因为调用抽象方法没意义。

4.      抽象类中的方法要被使用,必须由子类复写其所有的抽象方法后,建立子类对象调用。

5.      如果子类只覆盖了部分抽象方法,那么该子类还是一个抽象类。

6.      抽象类里面即可以有抽象方法,也可以有非抽象方法。

7.      抽象类中可以不定义抽象方法。



接口

接口:初期理解,可以认为是一个特殊的抽象类。

当抽象类中的方法都是抽象的,可以用接口来描述。



接口定义时,格式特点:

1.      接口中常见定义:常量,抽象方法。

2.      接口中的成员都有固定的修饰符。

常量:public static final

方法:public abstract

3.      接口中的成员都是public



接口:是不可以创建对象的,因为有抽象方法。

需要被子类实现,子类对接口中的抽象方法全都覆盖后,子类才可以实例化。

否则子类是一个抽象类。



接口可以被类多实现。一个类可以实现多个接口。

接口是对外暴露的规则。

接口是程序的功能扩展。

接口可以用来多实现。

类与接口之间是实现关系,而且类可以继承一个类的同时,实现多个接口。

接口和接口之间可以有继承关系。
回复 使用道具 举报
抽象类是和需要继承的那个类有关系的,比如学生继承人。
而接口的应用范围要比抽象类广的多,它多数会定义一些特性内容,可以和实现它的类没有子父联系
比如在人这个类中可以定义人必须有的,学生继承了,没错~~但是有的学生抽烟,但是我不能在人这个抽象类里面定义,因为不是每个人都抽烟,所以用接口定义一个抽烟的方法,谁抽烟谁就实现这个接口(特有功能)
回复 使用道具 举报
贴出我自己收集的总结:
Java接口和Java抽象类最大的一个区别,就在于Java抽象类可以提供某些方法的部分实现,而Java接口不可以,这大概就是Java抽象类唯一的优点吧,但这个优点非常有用。
如 果向一个抽象类里加入一个新的具体方法时,那么它所有的子类都一下子都得到了这个新方法,而Java接口做不到这一点,如果向一个Java接口里加入一个 新方法,所有实现这个接口的类就无法成功通过编译了,因为你必须让每一个类都再实现这个方法才行,这显然是Java接口的缺点。
一个抽象类的实现只能由这个抽象类的子类给出,也就是说,这个实现处在抽象类所定义出的继承的等级结构中,而由于Java语言的单继承性,所以抽象类作为类型定义工具的效能大打折扣。
在这一点上,Java接口的优势就出来了,任何一个实现了一个Java接口所规定的方法的类都可以具有这个接口的类型,而一个类可以实现任意多个Java接口,从而这个类就有了多种类型。

点评

nice  发表于 2012-5-30 17:36
回复 使用道具 举报
抽象类中的抽象方法需要其子类实现,也就是说需要继承。而我们知道Java是不支持多继承的,但是可以实现多个接口。所以有时候,接口的作用是非常大的。
回复 使用道具 举报
1,在abstract class在Java语言中表示的是一种继承关系,其抽象方法需要子类实现,并且一个类只能使用一次继承关系。但是,一个类却可以实现多个interface。
2,在abstract class中,类可以有自己的数据成员,也可以有非abstarct的成员方法,而在interface方式的实现中,类只能够有静态的不能被修改的数据成员,所有的成员方法都是abstract的。
回复 使用道具 举报
前边几楼已经回答的很详细了。我总结的呢就是不同点在两方面:
第一是:在构造形式上不同,抽象类中可以有非抽象方法,而接口中必须都是public的抽象类方法。
第二是:在用处上不同,继承抽象方法只能用extends继承一个,而实现接口可以implements多个接口。
我在加上了例子更生动的体现接口与抽象类:
  1. abstract class Person{
  2.         public abstract  void eat();
  3.         void say()
  4.         {
  5.                 System.out.println("Hello");
  6.         }       
  7. }
  8. interface Person{
  9.         void eat();
  10.         void say();       
  11. }
复制代码
回复 使用道具 举报
袁野 黑马帝 2012-5-30 19:04:37
8#
简单的说,他们俩的共性,都是重子类中抽取出来的。
抽象类的方法可以是抽象的也可以不是抽象的,
接口:作为扩展的。方法是抽象的,属性都是常量。
如何用接口和抽象类。看你在程序中需要哪个
回复 使用道具 举报
也可以这样理解:抽象类是某一类事物抽取出来的共性东西,继承抽象类都要复写抽象类中抽象的方法,在复写中,不同的子类有不同的方法主体;而接口是一种协议,双方共同遵循的一种规则,能够增加扩展性。
回复 使用道具 举报
首先抽象类是一个类,接口不是类,java的机制规定,一个类只能继承一个类,而一个类可以实现多个接口。
区别二,接口不能实现方法,且接口中的方法都是抽象的。抽象类中的方法可以有抽象的也可以有非抽象的。
区别三,子类必须实现接口的所有方法。继承抽象类必须覆写抽象类的抽象方法,非抽象方法可以不覆写


回复 使用道具 举报
whocases 黑马帝 2012-5-31 21:02:52
11#
抽象类的成员可以具有访问级别,而接口的成员全部public级别
抽象类可以包含字段,而接口不可以,
抽象类可以继承接口,而接口不能继承抽象类
抽象类的成员可以具有具体实现,而接口不行
抽象的子类可以选择性实现其基类的抽象方法,而接口的子类必须实现
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马