我觉得你没有坚持看完:Interface:接口
Abstract Class:抽象类
Class:类,包括抽象类。
学 Java 的人,或学 OO 编程的人,都是要弄清楚这两个概念的区别。
现将我的观点说一下。
在OO中,Interface 和Abstract Class 是两个不同的概念。
1。Abstract Class类似于 Abstract Data Type(抽象数据类型),它定义了它所有的subclass(子类)应该有的特性,就是在Abstract Class 中声明方法和变量。如定义一种抽象类型:车。那么在Java中,就要在class或method上加上 abstract。举个例:
public abstract class 车
{
  public int 轮子;
  public abstract void 移动();
}
这个抽象类就声明了所有的车应有的特征(如轮子)和行为(如移动)。之后你就可以扩展(extend)这个抽象类,只要是车,就可以,还有你可以在子类(subclass)中加入自己的特征,如
 public class 跑车 extends 车
 {
  public void 移动() 
  {
    System.out.println("我在移动");
  }   
  public void 引擎类型()  //属于自己(跑车)的行为
  {
    System.out.println("高级引擎");
  }
  轮子=4;
 }
 public class 自行车 extends 车
 {
  public void 移动() 
  {
    System.out.println("我在移动");
  }   
  public void 爆胎()  //属于自己(自行车)的行为
  {
    System.out.println("我走不动了");
  }
  轮子=2;
 }
2。Interface 则用来定义一个协议,所有的方法都可以实现它。一个Interface定义了方法,和最终静态(final static)变量,所有实现这个Interface的都要保证实现的东西与这个Interface 定义的行为一致。使用Interface可以让Object(对象)在一定的规范下沟通。

public interface TCP协议
{
 public void 打开端口();
 public void 关闭端口();
}
这样的话,只要实现这个Interface的都可以使用这两个方法交流。
在 Java平台里,它们主要有3个不同点:
1。一个类(Class)只能继承一个超类(Super class),但是可以实现多个Interface。
2。在Abstract Class内,你可以有不抽象(Abstract)的方法,即有意义的方法,但Interface不行。
 如
 public abstract class 车
 {
  public int 轮子;
  public abstract void 移动();
  public String 我是什么()
  {
    return "车子";
  }
 }
3。Interface不属于 继承范围。即不可能成为超类(Super Class)

解决方案 »

  1.   

    好像没什么区别,interface本身就是abstract的啊
      

  2.   

    我也想弄明白这个问题哟!二楼的哥们好象没回答到点子上。
    org.apache.commons.logging.Log 这个接口定义的时候给的是一个抽象接口。
    与普通的接口有什么区别呢?
    public abstract interface Log {  // Methods
      boolean isDebugEnabled();
      boolean isErrorEnabled();
      boolean isFatalEnabled();
      boolean isInfoEnabled();
      boolean isTraceEnabled();
      boolean isWarnEnabled();
      void trace(Object object);
      void trace(Object object, Throwable throwable);
      void debug(Object object);
      void debug(Object object, Throwable throwable);
      void info(Object object);
      void info(Object object, Throwable throwable);
      void warn(Object object);
      void warn(Object object, Throwable throwable);
      void error(Object object);
      void error(Object object, Throwable throwable);
      void fatal(Object object);
      void fatal(Object object, Throwable throwable);
    }
      

  3.   

    我说的没有问题啊,interface前面的abstract写和不写一样的说。
    楼上的说你看到org.apache.commons.loggin.Log的定义,呵呵,你自己去建一个接口,然后把class打包成jar文件,在eclipse里面加入构建路径,然后打开这个class看看?你的interface也被加上了abstract修饰。
      

  4.   

    觉得 没什么不同, interface 本身就是 abstract的呀~
      

  5.   

    下面是interpb 做的解释。
            “ Class和Class之间是extends
    Interface和Interface之间是extends
    Class和Interface之间是implements
    Interface和abstract  Interface之间仅仅只能被你自己定义的接口extends,不可能implements,   implements是Class和Interface之间的"专利"   
      一句话   就是   abstract   interface   只能被interface继承,不能直接被类实现 ”
    下面我要更正一点:其实,abstract interface 不单单能被interface继承,也能直接被类实现 
      

  6.   

    本来就是一样的,在很多开源jar包里面打开看到的abstract interface声明在其带的src里面的声明都没有abstract这项,说明这项是默认项,是在反射的时候加在类声明前面的
      

  7.   

    interface首先是abstract 的,是一种特殊的abstract 类
      

  8.   

    大家多读读thinking in java
    读多几遍◎◎J2EE技术交流群:9438177
    帮助第一,互相交流,大家帮助大家!共同进步!记住:分享与贡献同等重要!
      

  9.   

    java核心技术中有这样一个单元《接口与抽象类》
      

  10.   

    好多兄弟题目都没看清,人家说的是abstract interface和interface,不是abstract class和interface
      

  11.   

    interface是能被继承的...不过只能被接口继承罢了.....其实除了没实现外和普通类没什么区别
      

  12.   

    在《thinking in java》里,
    “ the abstract keyword, which allows you to create one or more methods in a class that have no definitions
    —you provide part of the interface without providing a corresponding implementation, which is created by inheritors. 
    The interface keyword produces a completely abstract class, one that provides no implementation at all.”
    所以结论就是 abstract interface 就是interface,两者根本没有区别。 
      

  13.   

    abstract public interface WebSocket { abstract public void connect(String url);
    }public class TCPWebSocket implements WebSocket {
    @Override
    public void connect(String url) {
    try {
    if (crtstate != ReadyState.CLOSED) {
    this.close();
    } this.connectTo(new URI(url));
    } catch (Exception ex) {
    this.handleException(ex);
    } }
    }蝴蝶兰 说的好像有问题。
      

  14.   


    我觉得你似乎没有看清楚楼主的问题,问题是interface和abstract interface的区别,而不是interface和abstract class的区别。
      

  15.   

    实际上,interface本身就已经是abstract的了,所以interface和abstract interface从语意上没有任何区别,楼主估计是使用了反编译工具查看jar包的源码时看到abstract interface这一语法的,其实这只是interface的完整表述而已,楼主可以看看jar包的源码文件,应该是没有abstract这个关键字的。