黑马程序员技术交流社区

标题: 抽象类没有抽象方法,有什么用 [打印本页]

作者: 梁志仲    时间: 2012-7-31 16:33
标题: 抽象类没有抽象方法,有什么用
没抽象方法的抽象类是否可以继承呢?因为没有抽象方法可供覆盖啊。这种抽象类一般用在哪些情况?
作者: 金龙    时间: 2012-7-31 16:46
一般没有抽象类的抽象方法的作用是用于为了不让别的类去创建它的对象,没有抽象方法的抽象类也可以被继承的。只是不需要强制子类覆盖而已。

希望对你有帮助
作者: 全海波    时间: 2012-7-31 16:52
可以继承的,我们知道,当某个类被修饰为抽象类的时候,起作用仅仅是为了不让建立该类对象。
至于什么时候用?
答:当你不想别人调用该类的方法的时候,且不想让其创建该类对象的时候,你就可以将该类声明为抽象类
作者: 孙建飞    时间: 2012-7-31 17:05
1.可以被继承
2.如果子类中没有完全覆盖抽象类的抽象方法,那么它的子类还是抽象类。也就是说抽象类的子类只要覆盖它的抽象方法就行,如果没有抽象方法就不用覆盖。
3.当不想让一个类创建对象时,可以把它写成抽象类,因为抽象类不能创建对象,没有意义。
作者: 陈淑飞    时间: 2012-7-31 17:09
没抽象方法的抽象类是否可以继承呢?因为没有抽象方法可供覆盖啊。这种抽象类一般用在哪些情况?


可以继承,这个用法在API中有个很显然的地方就是 事件监听机制中的Listener与Adapter的用法
当Listener接口有三个方法以上,而通常子类在实现时,只需要实现一个方法。另两个方法不想管,但接口规则是必须实现所有方法。所以那两个方法实现也是空方法。

为了简化代码,API中提供了大类的这相的Adapter抽象类,实现了Listener接口,但都是空方法。 所以Adapter被标识为抽象类(这样也防止实例化一个无意义的Adapter对象)。

这样,你的类在实现Listener时就简单了,可以直接继承Adapter就可以了。
作者: 王峰    时间: 2012-7-31 17:58
没有抽象方法的抽象类也可以被继承的。只是没有抽象方法让子类实现而已,它的主要目的是防止别的类创建它的对象实例。希望对楼主有帮助
作者: 尹善波    时间: 2012-7-31 18:30
/*
抽象类中可以不定义抽象方法,这种特殊的情况也就是只是为了防止该类中创建对象
没有抽象方法的抽象类也可以被子类继承,连覆盖都省了
*/
abstract class GetTime
{
public final void getTime()
{         
  long start = System.currentTimeMillis();
  runcode();
  long end = System.currentTimeMillis();
  System.out.println("毫秒:"+(end-start));
}
public  void runcode()
     {
    for(int x=0; x<4000; x++)
  {
   System.out.print(x);
  }
  }
}
class SubTime extends GetTime
{
void show()
{
  System.out.println("show  run" );
}
}
class  TemplateDemo
{
public static void main(String[] args)
{
  SubTime gt = new SubTime();
  gt.getTime();
  gt.show();
}
}
/*本例中父类中没有抽象方法,子类只是继承了父类中非抽象方法
而子类中还是可以创建自己的方法,
*/

作者: 胡文凡    时间: 2012-8-2 19:39
之所以把一个类声明为abstract,是因为想通过这个简单的声明方式使这个被声明的类不能被实例化,也就是说使任何人都不能在这个抽象类上使用new来实例化对象。

楼上说的Adapter应该是接口,指定了一个规范,不是这个范畴
作者: 朱烈葵    时间: 2012-8-2 20:25
陈淑飞 发表于 2012-7-31 17:09
可以继承,这个用法在API中有个很显然的地方就是 事件监听机制中的Listener与Adapter的用法,
当Listener ...

厉害······




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2