黑马程序员技术交流社区

标题: 接口与抽象类 [打印本页]

作者: 陈原野    时间: 2013-3-22 15:12
标题: 接口与抽象类
java中接口和抽象类的区别是什么?
作者: 谢威    时间: 2013-3-22 15:19
抽象:就是从多个事物中将共性的,本质的内容抽取出来。例如:狼和狗共性都是犬科,犬科就是抽象出来的概念。
接口:可以理解为一个特殊的抽象类,当抽象类中的方法都是抽象的时,这时就可以用接口来表示。
作者: Walking Walking    时间: 2013-3-22 15:24
抽象类和接口异同:
相同:
1,都可以在内部定义抽象方法。
2,通常都在顶层。
3,都不可以实例化,都需要子类来实现。

不同点:
1,抽象类中可以定义抽象方法和非抽象方法,
        而接口中只能定义抽象方法。
2,接口的出现可以多实现。
        抽象类只能单继承。
        也就是说:接口的出现避免了单继承的局限性。
3,继承和实现的关系不一致。
作者: 壁虎    时间: 2013-3-22 15:35
抽闲类和接口的区别
1.一个是用class关键字一个是用interface关键字来声明的
2.抽象类中可以有抽象方法也可以没有抽象方法同时也可以有常量或变量,而接口中只能有抽象方法和常量
3.抽象类可以有构造函数,接口中却不可以。
我们通常定义父类时,凡是父类中必须要被重写的方法我们都会把方法给抽象化,而方法变成抽象的了这个类也必须是抽象的。否则编译出错。
java并没有C++里面的多继承机制,因为java里面一个类是不能继承多个类的,因为存在安全的隐患。如:假设一个类如果有多个父类,那么多个父类中如果有相同的方法,子类对象在调用时,将不能确定到底是用哪一个。
但是java却用另一种体现形式来完成表示,就是接口。因为我们知道,一个类是可以实现多个接口的。
一个类实现多个接口了就没有上面的那种安全隐患了,因为我知道接口的方法都是抽象的,类如果实现接口必须要覆写接口中的抽象方法
在这里假设:多个接口中存在相同的方法,实现类在就不能覆写,因为我们知道一个类中不能出现一模一样的方法。
作者: HM刘博    时间: 2013-3-22 15:35
抽象类:
当多个类中出现相同功能,但是功能主体不同,这时可以进行向上抽取,只抽取功能定义,而不抽取功能主体,然后用abstract修饰。
抽象类的特点:
①抽象方法一定在抽象类中
②抽象方法和抽象类都必须被abstract关键字修饰
③抽象类不可以用new创建对象,因为调用抽象方法没意思
④抽象类中的抽象方法要被使用,必须由子类复写其所有的抽象方法后,建立子类对象调用,如果子类只覆盖了部分抽象方法,那么该子类还是一个抽象类。

接口:
可以认为是一个特殊的抽象类,当抽象类中的方法都是抽象的,该类就可以通过接口的形式来表示。
接口的特点:
①接口是对外暴露的规则
②接口是程序的功能扩展
③接口可以用来多实现
④类与接口之间是实现关系,而且类可以继承一个类的同时实现多个接口
⑤接口与接口之间可以有继承关系

抽象类和接口最大的不同就是:接口可以被其他类实现,抽象类不可以。

参考资料:http://dev.yesky.com/436/7581936.shtml


作者: 王军行    时间: 2013-3-22 16:22
java 语言中只支持单继承不支持多继承
因为多继承带来安全隐患:但是java保留了这种机制,并用另一种变现形式来完成,叫多实现。
抽象类的特点:
1.抽象方法一定定义在抽象类中
2.抽象类和抽象方法都必须被abstract修饰
3.抽象类不可以用new创建对象,因为调用抽象方法没意义
4.抽象类中的方法要被使用,必须由子类复写其所有的抽象方法建立子类对调用
特殊(抽象类也可以不定义抽象方法,这样做仅仅是不让该类建立对象)
接口:初期理解可以认为是特殊的抽象类
当抽象类中的方法都是抽象的那么该类可以通过接口的形式来表示
接口中的成员都有固定修饰符,(默认加,你不写自动加,你少写自动补,但是阅读性变差最好写全)
常量:public static final
方法:public abstract
记住接口的成员都是public的
接口可以被类多实现:也是对多继承不支持的转换形式,java支持多实现
多继承由于多个父类中可能存在同名功能(主体不同,java不知道运行哪个)而出现问题
多实现不会因为没有方法主体所以子类可以任意指定,覆盖一次就复写了所有同名功能。
接口方法不能使用static
一个类可以在继承一个类的同时实现多个接口(继承必须在前否则出错)
接口与接口之间是继承关系,接口之间可以实现多层继承还可以实现多继承(因为没有主题)
但是注意不能存在返回类型不同的同名函数
其实到后面就知道这两种类使用方面存在很大不同
接口经常用于提高代码的扩展性,降低代码之间的耦合性,便于软件后期升级,功能扩展
抽象类一般是向上抽取归纳而来,是子类共性的总结
作者: 戴乾刚    时间: 2013-3-22 17:02
1,抽象类中可以不定义抽象方法,这样做仅仅是不让该类建立对象。  
    接口所有方法都是抽象的。
2,抽象类只能被单继承
     接口可以被子接口继承,也可以被子类多实现
3,抽象类有构造函数,接口没有
这些都是不同点,至于它们各自特点毕老师视频里面都讲得挺清楚的
   
作者: kingsummerlucky    时间: 2013-3-22 17:43
从语法定义层面看abstract class和interface    在语法层面,Java语言对于abstract class和interface给出了不同的定义方式,下面以定义一个名为Demo的抽象类为例来说明这种不同。    使用abstract class的方式定义Demo抽象类的方式如下:
    abstract class Demo {    abstract void method1();  
      abstract void method2();    …   }   
使用interface的方式定义Demo抽象类的方式如下:    interface Demo {    void method1();    void method2();    …   }    在abstract class方式中,Demo可以有自己的数据成员,也可以有非abstarct的成员方法,而在interface方式的实现中,Demo只能够有静态的不能被修改的数据成员(也就是必须是static final的,不过在interface中一般不定义数据成员),所有的成员方法都是abstract的。从某种意义上说,interface是一种特殊形式的abstract class。  
作者: 安鹏宇    时间: 2013-3-22 17:44
简单说
java中规定只能单继承不能多继承
接口补足了这一点,接口可以被多实现  方便了引用
作者: 安鹏宇    时间: 2013-3-22 17:56
看错题目了,不好意思。。
接口是公开的,里面不能有私有的方法或变量,是用于让别人使用的,而抽象类是可以有私有方法或私有变量的,

另外,实现接口的一定要实现接口里定义的所有方法,
而实现抽象类可以有选择地重写需要用到的方法,
一般的应用里,最顶级的是接口,然后是抽象类实现接口,最后才到具体类实现。

还有,接口可以实现多重继承,而一个类只能继承一个超类,但可以通过继承多个接口实现多重继承,
接口还有标识(里面没有任何方法,如Remote接口)和数据共享(里面的变量全是常量)的作用.
作者: 王豪    时间: 2013-3-22 18:00
接口与抽象类的区别
               
                1.抽象类是类,只能单继承  接口可以多实现
                2.抽象类是继承  is关系 它描述的是基本功能
                  接口是实现    like   它描述的是扩展功能
               
                3.抽象类中可以存在非抽象的方法
                  接口中的方法必须全是抽象的。





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2