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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 陈红建 中级黑马   /  2012-8-7 09:05  /  2367 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

什么是抽象类?什么是接口?两者有区别吗?两者的继承机制是怎样的?
能详细说明一下吗?

9 个回复

倒序浏览
抽象类表示该类中可能已经有一些方法的具体定义,但是接口就仅仅只能定义各个方法的界面(方法名,参数列表,返回类型),并不关心具体细节。
回复 使用道具 举报
本帖最后由 徐帅 于 2012-8-7 09:15 编辑

个人根据毕老师视频的总结:
抽象类:
当多个类中出现相同功能,但是功能主体不同,
这是可以进行向上抽取。这时,只抽取功能定义,而不抽取功能主体。
1. 抽象类的特点:
  1> 抽象方法一定在抽象类中。
  2> 抽象方法和抽象类都必须被abstract关键字修饰。
  3> 抽象类不可以用new创建对象。因为调用抽象方法没意义。
  4> 抽象类中的抽象方法要被使用,必须由子类复写起所有的抽象方法后,(若只是覆盖部分,子类继承后仍有抽象方法,就变成了抽象类)
                 建立子类对象用。如果子类 只覆盖了部分抽象方法,那么该子类还是一个抽象类。
  5>抽象类具有强制性,强迫子类必须复写
2. 抽象类和一般类
1> 抽象类和一般类没有太大的不同。该如何描述事物,就如何描述事物,只不过,该事物出现了一些看不懂的东西。这些不确定的部分,
              也是该事物的功能,需要明确出现。但是无法定义主体。通过抽象方法来表示。抽象类比一般类多个了抽象函数。就是在类中可以定义抽象方法。
2> 抽象类不可以实例化。

接口
         1. 初期理解,可以认为是一个特殊的抽象类
                 当抽象类中的方法全是抽象的,那么该类可以通过接口的形式来表示。
             1> class用于定义类
                interface 用于定义接口。         
             2> 接口:是不可以创建对象的,因为有抽象方法。
             3> 接口需要被子类实现,子类对接口中的抽象方法全都覆盖后,子类才可以实例化。否则子类是一个抽象类。
             4> 一个类可以对接口进行多实现,也弥补了多继承带来的安全隐患,所以java 对多继承进行了改良。用多实现方法来体现多继承的特性。
             5>  java中只有在接口与接口之间存在多继承
         2 格式特点:
            1> 通过interface来定义。
            2> 接口中常见成员:常量,抽象方法。而且这些成员都有固定的修饰符。
            常量:public static final
            方法:public abstract
                         注意:接口中的成员都是public的,既共有的。
         3. 应用特点:
             1> 接口是对外暴露的规则。
             2> 接口是功能的扩展。
             3> 接口的出现降低了耦合性。
             4> 接口型引用指向子类对象(多态)提高的程序扩展性,呈现多态

4. 抽象类和接口异同:
         相同:
            1> 都可以在内部定义抽象方法。
            2> 通常都在顶层。
            3> 都不可以实例化,都需要子类来实现。
不同点:
            1> 抽象类中可以定义抽象方法和非抽象方法,
                而接口中只能定义抽象方法。
            2> 接口的出现可以多实现。抽象类只能单继承。
               也就是说:接口的出现避免了单继承的局限性。
                    3> 继承和实现的关系不一致。继承:is a,实现:like a
          !!! 基本功能定义在类中,扩展功能定义在接口中


评分

参与人数 1技术分 +1 收起 理由
杨志 + 1

查看全部评分

回复 使用道具 举报
如果一个子类要实现接口,就必须实现接口中所有的方法(对)
而子类可以不实现抽象类所有的抽象方法。(对)如果一个子类只实现了部分抽象方法,则子类中仍有抽象方法,应该还是抽象类。

回复 使用道具 举报
我自己的一点总结,分享一下:
--------------------------------------------------
抽象类:
**抽象就是从多个事物中将共性的,本质的内容抽取出来。
        **Java中可以定义没有方法体的方法,该方法的具体实现由子类完成,该方法称为抽象方法,包含抽象方法的类就是抽象类。
        **多个对象都具备相同的功能,但是功能具体内容有所不同,那么在抽取过程中,只抽取了功能定义,并未抽取功能主体,
        那么只有功能声明,没有功能主体的方法称为抽象方法。
注意事项:
**抽象类和抽象方法都必须用abstract关键字修饰。
        **抽象方法一定要在抽象类中。
        **一个类继承了抽象类:
                要么该类实现抽象类中的所有抽象方法。
                要么该类实现部分抽象方法或者根本不实现任何抽象方法,这个时候需要把自身定义为抽象类。
        **抽象类不能够被实例化。也就是说不可以通过new关键字创建对象。
--------------------------------------------------------
接口:
接口是特殊的抽象类,所有的属性都是公开静态常量(全局常量),所有的方法都是公开抽象方法而且没有构造方法。
        **接口是对外暴露的规则。
        **接口是程序的功能扩展。
        **接口的出现降低耦合性。
        **接口可以用来多实现。
类与接口之间是实现关系,而且类可以继承一个类的同时实现多个接口。接口与接口之间可以有继承关系。
注意:
        *如果接口默认的方法是public和abstract,可以省略不写,但是类在实现接口时,不可省public;
        *如果接口的返回值不是void,那么类实现该接口时,方法体中必须有return语句;
        *如果接口的返回值是void,大括号内可以没有语句。
        *如果父类实现了某个接口,子类也自然实现了该接口。
-----------------------------------------
接口和抽象类的区别--------都是不断向上抽取出来的

        A:抽象类只能单继承,接口可以多实现。
        B:抽象类中可以由非抽象方法。抽象类中可以定义变量和常量。接口中的方法都是抽象的。接口中只能有静态常量。因为接口中的方法都有默认修饰符:public abstract;接口中的成员变量都有默认修饰符:public static final
        C:抽象类中定义的是一个体系的共性功能。接口中通常定义的对象中的扩展功能。
        D:接口的出现避免了单继承的局限性。
        E:抽象类被继承表示的是:is a 的关系。叫做:xx是yy的一种。 接口被实现表示的是:like a 的关系。叫做:xx像yy一种。

评分

参与人数 1技术分 +1 收起 理由
杨志 + 1

查看全部评分

回复 使用道具 举报
抽象类:用关键字abstract修饰的类,就是抽象类。有抽象方法的类一定是抽象类,但抽象类不一定要有抽象方法。抽象类不能被实例化,但可以作为父类,由子类继承该抽象类,并重写其抽象的方法。抽象类在模板设计模式中有所应用,抽象类也和其他类一样,具有继承,比如继承Object类。java是单继承的,当你继承了抽象类,子类需要继承其他类就不行了。所以引入了接口,接口中的方法一定是抽象方法,默认有public  abstract 修饰,接口中的变量有public static final 修饰。类(包括抽象类)可以实现若干个接口。接口可以继承接口。所以对接口来所,实现了多继承。这两个类用好了会形成一种思想,面向接口编程的思想。
就先这么多,个人学的也是比较肤浅,还有什么不足之处,请多见谅。
回复 使用道具 举报
抽象类 就是用abstract声明的,比如public abstract class T{};
一个抽象类可以没有抽象方法,抽象类不能创建实例,但是可以声明一个变量;
当一个类有抽象方法时,该类必须声明为抽象类!

接口 用interface声明,比如,public interface TT{},
一个接口中的变量类型都应该是public static final类型,比如pulic static final int i=5,当然为了简便,约定写成int i=5;前面的隐含了一个接口中的方法类型都应该是抽象的,比如 public abstract void s();接口中的方法不能带static,final修饰符,当然为了简便,约定写成void s();;前面的隐含了,


抽象类被继承时,如果子类不是抽象方法,则要实现抽象父类中的所有方法,继承用关键字extends,
接口可以被一个类实现,用implements关键字,要实现接口中的所有方法,如果子类为非抽象类,则要实现接口所有方法


注意,一个类只能继承一个一般类或者抽象类,但是可以实现多个接口,同样一个接口可以继承多个接口,接口可以多继承。
回复 使用道具 举报
。。。。。
回复 使用道具 举报
1:抽象类
(1)多个类有相同的方法声明,但是方法体不一样。这个时候,我们考虑把方法声明进行抽取。让子类继承后,自己去实现方法体。没有方法体的方法,我们需要用抽象标志下。抽象的关键字是:abstract。
(2)抽象类:
    Java中可以定义没有方法体的方法,该方法的具体实现由子类完成,
    该方法称为抽象方法,包含抽象方法的类就是抽象类。
(3)抽象类的特点:
   A:抽象类和抽象方法都要用abstract进行修饰
   B:抽象类不能被实例化
   C:抽象类中不一定有抽象方法,但是,有抽象方法的类一定是抽象类。
   D:抽象类的使用。通过子类对象来使用方法。

(4)抽象类中数据的特点
  A:成员变量;抽象类中可以有成员变量,也可以有常量。
  B:成员方法;抽象类中可以有抽象方法,也可以有非抽象方法。
  C:构造方法
        抽象类是一个类,所以,它有构造方法。
        虽然本身不能实例化。但是可以给子类实例化使用。
               
2:接口(重点)
(1)当一个类中的方法都是抽象的时候,java提供了另一种表示方式,叫接口。
用interface关键字表示。类与接口关系用implements表示。
(2)接口的成员特点
   A:成员变量
        是常量。
        默认修饰 public static final
    B:成员方法
        都是抽象的。
        默认修饰 public abstract
(3)关系
   A:类与类的关系
        是继承关系。类与类只能单继承,可以多重继承。
   B:类和接口的关系
        是实现关系。类可以多实现接口。
        类在继承一个类的同时,可以实现多个接口。
   C:接口和接口的关系
        是继承关系。接口可以多继承接口。
(4)接口的特点
        A:是对外暴露的规则
        B:是程序的扩展功能
        C:接口的出现降低耦合性。
          耦合(类与类之间的关系)
            内聚(类完成功能的能力)
                 D:接口可以多实现。

(5)接口和抽象类的区别
        A:抽象类只能被单继承
              接口可以多实现
        B:接口的出现避免了多继承的局限性。
        C:抽象类中的数据特点:
           成员变量:可以是变量,也可以是常量
           成员方法:可以是抽象方法,也可以是非抽象方法
           构造方法:有构造方法
           接口中的数据特点:
           成员变量:是常量。都有默认修饰 public static final
             成员方法:都是抽象方法。都有默认修饰 public abstract
        D:抽象类中定义的是体系中的共性功能。
            接口中定义的是体系中的扩展功能。
           E:抽象类被继承是"is a"关系:xx是yy的一种
           接口被实现是"like a"关系:xx像yy的一种
       
回复 使用道具 举报
自己多看视频,自己总结
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马