抽象类是不是有的方法是没有方法体的?
比如:
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) {}
}
比如:
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) {}
}
抽象类中可以有抽象方法,也可以有非抽象方法。
WindowAdapter这个抽象类实现了WindowListener, WindowStateListener, WindowFocusListener这些接口,以上的方法就是这几个接口的方法。
之所以这些方法写成空实现,是为了在用到WindowAdapter这个类时,可以自己选择实现其中的某个方法,避免了实现WindowListener, WindowStateListener, WindowFocusListener这些接口时,都要讲方法在子类中实现。
比如一个类只有静态方法和静态属性,(这些都部需要实例来访问,)定义成抽象的也可以。
public abstract class TestHelloWorld//定义成抽象类也能运行。
{
public static void main(String[] args)
{
System.out.println("Hello world");
}
}
1.抽象方法一定在抽象类中。
2.抽象方法和抽象类都必须被abstract关键字修饰。
3.抽象类不可以用new创建对象,因为调用抽象方法没意义。
4.抽象类中的方法要被使用,必须由子类复写其所有的抽象方法后
建立子类对象调用,如果子类只覆盖了部分抽象方法,那么该子类还
是一个抽象类。抽象类和一般类没有太大的不同。
该如何描述事物,就如何描述事物,只不过,该事物中,出现了一些看不懂
的东西,这些不确定的部分,也是该事物的功能,需要明确出来,但是无法
定义主体。通过抽象方法来表示。抽象类比一般类多了抽象方法。就是在类中可以定义抽象方法。
抽象类不可以实例化。特殊:抽象类中可以不定义抽象方法,这样做仅仅是不让该类建立对象。
package org.iteye.bbjava.csdn.problems;public abstract class AbstactClass {
public static void main(String []args){
//new AbstactClass(); //Cannot instantiate the type AbstactClass
}}
因为这个windowadapter就是为了要省去实现某些listener不必要的方法。
public的 当然也可以有。这个最好 对比一下接口的概念。。
http://blog.csdn.net/duanml61/article/details/8133258我写的应该还算易理解吧
在C++中,含有纯虚拟函数的类称为抽象类,它不能生成对象。
在java中,含有抽象方法的类称为抽象类,同样不能生成对象。
抽象类是不完整的,并且它只能用作基类。它与非抽象类的不同:
1、抽象类不能直接实例化,并且对抽象类使用 new 运算符是编译时错误。虽然一些变量和值在编译时的类型可以是抽象的,但是这样的变量和值必须或者为 null,或者含有对非抽象类的实例的引用(此非抽象类是从抽象类派生的)。
2、允许(但不要求)抽象类包含抽象成员。
3、抽象类不能被密封。