抽象类是不是有的方法是没有方法体的?
比如:
abstract void eat();
但是,今天去看了一下java的源码,发现WindowAdapter是抽象类,但是它的所有方法都是有空方法体的,这个也是抽象类吗?烦请高手解释一下。肯定是我的理解出现问题了
源码如下public abstract class WindowAdapter
    implements WindowListener, WindowStateListener, WindowFocusListener
{
    public void windowOpened(WindowEvent e) {}     public void windowClosing(WindowEvent e) {}    public void windowClosed(WindowEvent e) {}    public void windowIconified(WindowEvent e) {}    public void windowDeiconified(WindowEvent e) {}    public void windowActivated(WindowEvent e) {}    public void windowDeactivated(WindowEvent e) {}    public void windowStateChanged(WindowEvent e) {}    public void windowGainedFocus(WindowEvent e) {}    public void windowLostFocus(WindowEvent e) {}
}

解决方案 »

  1.   

    只要带有abstract关键字的都是抽象类抽象类的一个明显特征是不能被实例化,也就是不能new
      

  2.   

    抽象类中的方法可以加abstract,也可以不加abstract,如果想要继承抽象类的话,必须要在子类中覆写抽象类中的全部抽象方法才行。抽象类里面的方法只需声明,无需写方法体,方法体在子类中覆写时写入方法体就行了。个人理解,如有错误,请纠正,谢谢。
      

  3.   

    用abstract 修饰的类都是抽象类。
    抽象类中可以有抽象方法,也可以有非抽象方法。
    WindowAdapter这个抽象类实现了WindowListener, WindowStateListener, WindowFocusListener这些接口,以上的方法就是这几个接口的方法。
    之所以这些方法写成空实现,是为了在用到WindowAdapter这个类时,可以自己选择实现其中的某个方法,避免了实现WindowListener, WindowStateListener, WindowFocusListener这些接口时,都要讲方法在子类中实现。
      

  4.   

    “只要带有abstract关键字的都是抽象类”?就算里面的方法都有方法体?
      

  5.   

    没有抽象方法的类,也可以定义成抽象类. 其目的就是不允许(或不需要)生成这个类的实例(不能new 出对象)。
    比如一个类只有静态方法和静态属性,(这些都部需要实例来访问,)定义成抽象的也可以。
    public abstract class TestHelloWorld//定义成抽象类也能运行。
    {
    public static void main(String[] args)
    {
    System.out.println("Hello world");
    }
    }
      

  6.   

    抽象类的特点:
    1.抽象方法一定在抽象类中。
    2.抽象方法和抽象类都必须被abstract关键字修饰。
    3.抽象类不可以用new创建对象,因为调用抽象方法没意义。
    4.抽象类中的方法要被使用,必须由子类复写其所有的抽象方法后
    建立子类对象调用,如果子类只覆盖了部分抽象方法,那么该子类还
    是一个抽象类。抽象类和一般类没有太大的不同。
    该如何描述事物,就如何描述事物,只不过,该事物中,出现了一些看不懂
    的东西,这些不确定的部分,也是该事物的功能,需要明确出来,但是无法
    定义主体。通过抽象方法来表示。抽象类比一般类多了抽象方法。就是在类中可以定义抽象方法。
    抽象类不可以实例化。特殊:抽象类中可以不定义抽象方法,这样做仅仅是不让该类建立对象。
      

  7.   

    类定义时带abstract 关键字的就是抽象类abstract类WindowAdapter的方法为什么会有方法体呢,是因为它 implements  WindowListener, WindowStateListener, WindowFocusListener 等接口。那些方法中有一个到几个是这些接口中定义要被实现的方法。抽象类不能不实例化(编译通不过),一般是使用它的子类。
    package org.iteye.bbjava.csdn.problems;public abstract class AbstactClass {


    public static void main(String []args){
    //new AbstactClass(); //Cannot instantiate the type AbstactClass
    }}
      

  8.   

    楼上各位大神,不知我这么说对不对。因为这个windowadapter就是为了要省去实现某些listener不必要的方法。所以在这个抽象类里都实现了空方法体。如果在这个抽象类中没有实现,那么这个adapter在被调用的时候,某些人只重写了其中的部分方法,其他没重写的还是抽象方法,还是不能实例化,所以这个adapter也就没作用了。对不对?
      

  9.   

    上机试了一下,其实这么想就对了。如果没有在adapter里面实现listener接口的方法,那么这上adapter实例化时还是要重写抽象方法,不管用不用。那么这个adapter就没意义了(本意是要免去重写一些不必要的方法)。
      

  10.   

    抽象类也可以有非abstarct的成员方法。
      

  11.   

    楼主这样理解对.
    因为这个windowadapter就是为了要省去实现某些listener不必要的方法。
      

  12.   

    抽象类是可以有私有方法或私有变量的。
    public的 当然也可以有。这个最好 对比一下接口的概念。。
    http://blog.csdn.net/duanml61/article/details/8133258我写的应该还算易理解吧
      

  13.   

     用 abstract 修饰的类是抽象类。   
       在C++中,含有纯虚拟函数的类称为抽象类,它不能生成对象。  
      在java中,含有抽象方法的类称为抽象类,同样不能生成对象。
      抽象类是不完整的,并且它只能用作基类。它与非抽象类的不同:  
     1、抽象类不能直接实例化,并且对抽象类使用 new 运算符是编译时错误。虽然一些变量和值在编译时的类型可以是抽象的,但是这样的变量和值必须或者为 null,或者含有对非抽象类的实例的引用(此非抽象类是从抽象类派生的)。   
      2、允许(但不要求)抽象类包含抽象成员。 
     3、抽象类不能被密封。 
      

  14.   

    一个类被关键字abstract修饰,并且这个类不能实例化,