首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

什么是抽象类?该如何处理

2012-12-16 
什么是抽象类?抽象类是不是有的方法是没有方法体的?比如:abstract void eat()但是,今天去看了一下java的

什么是抽象类?
抽象类是不是有的方法是没有方法体的?
比如:

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) {}
}




[最优解释]
抽象类是可以有私有方法或私有变量的。。。。

引用:
抽象类是不是有的方法是没有方法体的?
比如:
Java code?1abstract void eat();
但是,今天去看了一下java的源码,发现WindowAdapter是抽象类,但是它的所有方法都是有空方法体的,这个也是抽象类吗?烦请高手解释一下。肯定是我的理解出现问题了
源码如下
Java code?12345678910111213141516171……


public的 当然也可以有。。。。

这个最好 对比一下接口的概念。。
http://blog.csdn.net/duanml61/article/details/8133258

我写的应该还算易理解吧。。。

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

[其他解释]
抽象类中的方法可以加abstract,也可以不加abstract,如果想要继承抽象类的话,必须要在子类中覆写抽象类中的全部抽象方法才行。

抽象类里面的方法只需声明,无需写方法体,方法体在子类中覆写时写入方法体就行了。

个人理解,如有错误,请纠正,谢谢。
[其他解释]
引用:
引用:引用:用abstract 修饰的类都是抽象类。
抽象类中可以有抽象方法,也可以有非抽象方法。
WindowAdapter这个抽象类实现了WindowListener, WindowStateListener, WindowFocusListener这些接口,以上的方法就是这几个接口的方法。
之……

这个说得不错++
[其他解释]
引用:
引用:引用:用abstract 修饰的类都是抽象类。
抽象类中可以有抽象方法,也可以有非抽象方法。
WindowAdapter这个抽象类实现了WindowListener, WindowStateListener, WindowFocusListener这些接口,以上的方法就是这几个接口的方法。
之……


++
[其他解释]
抽象类的特点:
1.抽象方法一定在抽象类中。
2.抽象方法和抽象类都必须被abstract关键字修饰。
3.抽象类不可以用new创建对象,因为调用抽象方法没意义。
4.抽象类中的方法要被使用,必须由子类复写其所有的抽象方法后
建立子类对象调用,如果子类只覆盖了部分抽象方法,那么该子类还
是一个抽象类。

抽象类和一般类没有太大的不同。
该如何描述事物,就如何描述事物,只不过,该事物中,出现了一些看不懂


的东西,这些不确定的部分,也是该事物的功能,需要明确出来,但是无法
定义主体。通过抽象方法来表示。

抽象类比一般类多了抽象方法。就是在类中可以定义抽象方法。
抽象类不可以实例化。

特殊:抽象类中可以不定义抽象方法,这样做仅仅是不让该类建立对象。
[其他解释]
类定义时带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
}

}


[其他解释]
引用:
抽象类中的方法可以加abstract,也可以不加abstract,如果想要继承抽象类的话,必须要在子类中覆写抽象类中的全部抽象方法才行。

抽象类里面的方法只需声明,无需写方法体,方法体在子类中覆写时写入方法体就行了。

个人理解,如有错误,请纠正,谢谢。

抽象类里可以有非抽象方法,方法可以写方法体!
[其他解释]
只要带有abstract关键字的都是抽象类

抽象类的一个明显特征是不能被实例化,也就是不能new
[其他解释]
用abstract?修饰的类都是抽象类。
抽象类中可以有抽象方法,也可以有非抽象方法。
WindowAdapter这个抽象类实现了WindowListener, WindowStateListener, WindowFocusListener这些接口,以上的方法就是这几个接口的方法。
之所以这些方法写成空实现,是为了在用到WindowAdapter这个类时,可以自己选择实现其中的某个方法,避免了实现WindowListener, WindowStateListener, WindowFocusListener这些接口时,都要讲方法在子类中实现。
[其他解释]
抽象类可以基本上就是普通方法和接口类的结合体。你可以这么记着使用,当然不能这么理解。
[其他解释]
引用:
没有抽象方法的类,也可以定义成抽象类. 其目的就是不允许(或不需要)生成这个类的实例(不能new 出对象)。
比如一个类只有静态方法和静态属性,(这些都部需要实例来访问,)定义成抽象的也可以。
Java code1234567public abstract class TestHelloWorld//定义成抽象类也能运行。{    public static void……


正解。
[其他解释]
引用:
抽象类是不是有的方法是没有方法体的?
比如:
Java code1abstract void eat();
但是,今天去看了一下java的源码,发现WindowAdapter是抽象类,但是它的所有方法都是有空方法体的,这个也是抽象类吗?烦请高手解释一下。肯定是我的理解出现问题了
源码如下
Java code1234567891011121314151617181……


抽象类其实用你看的源码来说最好,把所有的可能会出现的方法都抽象出来,我要使用他,那我就要去实现他的方法,同时抽象类中的方法不一定只是一个空方法,你也可以写具体的方法。
[其他解释]
引用:
引用:用abstract 修饰的类都是抽象类。
抽象类中可以有抽象方法,也可以有非抽象方法。
WindowAdapter这个抽象类实现了WindowListener, WindowStateListener, WindowFocusListener这些接口,以上的方法就是这几个接口的方法。
之所以这些方法写成空实现,是为了在用到……

接口中的方法必须都是抽象的。抽象类中的方法可以是抽象的,也可以是非抽象的。
抽象类实现接口后,可以不实现接口中的方法, 因为抽象类中也可以有抽象方法。
非抽象类实现接口后, 就必须实现接口中的方法。
[其他解释]
引用:
引用:只要带有abstract关键字的都是抽象类

抽象类的一个明显特征是不能被实例化,也就是不能new
“只要带有abstract关键字的都是抽象类”?就算里面的方法都有方法体?


of course
[其他解释]
学习了,
[其他解释]
抽象方法能实现一部分
------其他解决方案--------------------


抽象类也可以有非abstarct的成员方法。
[其他解释]

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

楼主这样理解对.
因为这个windowadapter就是为了要省去实现某些listener不必要的方法。
[其他解释]
兄弟,你要知道,有抽象方法的类 肯定是  抽象类;
但是抽象类不一定有抽象方法,以前我学有的视频确实说的不是很清晰;
抽象类可以有抽象方法,可以有部分抽象方法,甚至没有抽象方法。
  LZ上面的类就算是抽象类,
他的方法都是实现了(没有抽象方法)“因为都有{}实现了”,只不过是空的实现,即什么也没有做的实现。
[其他解释]
这个适配器类就是为了解决监听器接口必须实现每个方法,而适配器只要实现一个就可以了。
[其他解释]
 用 abstract 修饰的类是抽象类。   
   在C++中,含有纯虚拟函数的类称为抽象类,它不能生成对象。  
  在java中,含有抽象方法的类称为抽象类,同样不能生成对象。
  抽象类是不完整的,并且它只能用作基类。它与非抽象类的不同:  
 1、抽象类不能直接实例化,并且对抽象类使用 new 运算符是编译时错误。虽然一些变量和值在编译时的类型可以是抽象的,但是这样的变量和值必须或者为 null,或者含有对非抽象类的实例的引用(此非抽象类是从抽象类派生的)。   
  2、允许(但不要求)抽象类包含抽象成员。 
 3、抽象类不能被密封。 
[其他解释]
抽象类不能创建对象。
[其他解释]
一个类被关键字abstract修饰,并且这个类不能实例化,
[其他解释]
引用:
抽象类中的方法可以加abstract,也可以不加abstract,如果想要继承抽象类的话,必须要在子类中覆写抽象类中的全部抽象方法才行。

抽象类里面的方法只需声明,无需写方法体,方法体在子类中覆写时写入方法体就行了。

个人理解,如有错误,请纠正,谢谢。

你说的那个我也懂,比如这个“抽象类里面的方法只需声明,无需写方法体”,这正是我想问的地方。因为我给的这个源码它的抽象方法是有方法体的
[其他解释]
引用:
只要带有abstract关键字的都是抽象类

抽象类的一个明显特征是不能被实例化,也就是不能new

“只要带有abstract关键字的都是抽象类”?就算里面的方法都有方法体?
[其他解释]
引用:
用abstract 修饰的类都是抽象类。
抽象类中可以有抽象方法,也可以有非抽象方法。
WindowAdapter这个抽象类实现了WindowListener, WindowStateListener, WindowFocusListener这些接口,以上的方法就是这几个接口的方法。
之所以这些方法写成空实现,是为了在用到WindowAdapter这个类时,可以自己选择实现其中的某个方法,避……

抽象类可以全部方法都是非抽象方法?看来是我以前理解错了,以为抽象类必须要有抽象方法。
现在有点晃过来了。其实实现接口就必须实现他们的方法,呵呵。
[其他解释]
引用:
没有抽象方法的类,也可以定义成抽象类. 其目的就是不允许(或不需要)生成这个类的实例(不能new 出对象)。
比如一个类只有静态方法和静态属性,(这些都部需要实例来访问,)定义成抽象的也可以。


Java code



1234567

public abstract class TestHelloWorld//定义成抽象类也能运行。 {     public static……

觉得有点道理。看来以前是惯性思维的问题,觉得抽象类必须有抽象方法
[其他解释]
引用:
楼上各位大神,不知我这么说对不对。因为这个windowadapter就是为了要省去实现某些listener不必要的方法。所以在这个抽象类里都实现了空方法体。如果在这个抽象类中没有实现,那么这个adapter在被调用的时候,某些人只重写了其中的部分方法,其他没重写的还是抽象方法,还是不能实例化,所以这个adapter也就没作用了。对不对?

上机试了一下,其实这么想就对了。如果没有在adapter里面实现listener接口的方法,那么这上adapter实例化时还是要重写抽象方法,不管用不用。那么这个adapter就没意义了(本意是要免去重写一些不必要的方法)。
[其他解释]
楼上各位大神,不知我这么说对不对。因为这个windowadapter就是为了要省去实现某些listener不必要的方法。所以在这个抽象类里都实现了空方法体。如果在这个抽象类中没有实现,那么这个adapter在被调用的时候,某些人只重写了其中的部分方法,其他没重写的还是抽象方法,还是不能实例化,所以这个adapter也就没作用了。对不对?


[其他解释]

引用:
引用:
用abstract 修饰的类都是抽象类。
抽象类中可以有抽象方法,也可以有非抽象方法。
WindowAdapter这个抽象类实现了WindowListener, WindowStateListener, WindowFocusListener这些接口,以上的方法就是这几个接口的方法。
之所以这些方法写成空实现,是为了在用到WindowAdapt……

现在看过来我这一层回复,又理解错了。抽象类实现接口,不一定要全部实现接口的方法!
[其他解释]
引用:
抽象类是可以有私有方法或私有变量的。。。。

引用:
抽象类是不是有的方法是没有方法体的?
比如:
Java code?1abstract void eat();
但是,今天去看了一下java的源码,发现WindowAdapter是抽象类,但是它的所有方法都是有空方法体的,这个也是抽象类吗?烦请高手解释一下。肯定是我的理解出现问题了
源码如下
Java ……

你那个总结不错,才发现接口不能有私有的修饰符,不能定义变量。这个能给分
[其他解释]
被抽的类....
[其他解释]
引用:
引用:
引用:
用abstract 修饰的类都是抽象类。
抽象类中可以有抽象方法,也可以有非抽象方法。
WindowAdapter这个抽象类实现了WindowListener, WindowStateListener, WindowFocusListener这些接口,以上的方法就是这几个接口的方法。
之所以这些方法写成空……

这一问,发现自己基础还真不扎实
[其他解释]
被抽过的类
[其他解释]
该回复于2012-11-14 17:14:00被管理员删除
[其他解释]
引用:
引用:
抽象类中的方法可以加abstract,也可以不加abstract,如果想要继承抽象类的话,必须要在子类中覆写抽象类中的全部抽象方法才行。

抽象类里面的方法只需声明,无需写方法体,方法体在子类中覆写时写入方法体就行了。

个人理解,如有错误,请纠正,谢谢。
抽象类里可以有非抽象方法,方法可以写方法体!


我只是说无需写方法体,并没有不可以写,在抽象类中,是可以有抽象方法和非抽象方法的,如果类中有一个抽象方法,那么这个类必须要声明成抽象类。所以我没有错,你也没有错,呵呵。

热点排行