A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© zjm10zj 中级黑马   /  2013-3-25 23:43  /  5637 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 zjm10zj 于 2013-3-26 22:21 编辑

抽象类中可不可以没有抽象方法?

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

7 个回复

倒序浏览
本帖最后由 曹玉龙 于 2013-3-26 22:13 编辑

可以啊,更正下,有不实例化的作用.
随手弄个代码,看下
  1. import java.io.BufferedInputStream;
  2. import java.io.BufferedOutputStream;
  3. import java.io.FileInputStream;
  4. import java.io.FileOutputStream;
  5. import java.io.IOException;
  6. //无抽象方法的抽象类
  7. abstract class aaa
  8. {
  9.         public static void bbb()
  10.         {}
  11. }
  12. //复制MP3((把c盘目录下的a.mp3中的内容复制到d盘下的b.mp3中)
  13. public class Demo
  14. {
  15.         public static void main(String[] args)throws IOException
  16.         {
  17.                 BufferedInputStream br = new BufferedInputStream(new FileInputStream("c:\\a.mp3"));
  18.                 BufferedOutputStream bw = new BufferedOutputStream(new FileOutputStream("f:\\b.mp3"));

  19.                 byte[] bys = new byte[1024];
  20.                 int len = 0;
  21.                 while((len=br.read(bys))!=-1)
  22.                 {
  23.                         bw.write(bys,0,len);
  24.                         bw.flush();
  25.                 }
  26.                 bw.close();
  27.                 br.close();
  28.         }
  29. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

回复 使用道具 举报
当然可以没有抽象方法,比如我不想让这个类被实例化,也就是说不能通过new来新建对象,就可以定义个抽象类。
再比如接口,就是特殊的抽象类,里面也可以没有抽象方法。只是声明一些规范。
有一些抽象类的总结,你可以看一下

抽象类的特点:
   1.抽象类不可以实例化 不能new
   2.抽象类是用来被继承的。
   3.抽象类中可以包含抽象方法.抽象方法是用abstract修饰的方法.
     抽象方法是用来被重写的。
     抽象方法的格式:
    修饰符 abstract 方法的返回值类型 方法名(参数);
   如果父类中包含抽象方法,那么子类必须将父类中所有抽象方法重写。
  抽象类的细节
   1.如果父类是抽象类,子类是普通类 那么子类必须重写父类中的抽象方法。
   2.如果父类是抽象类,子类是抽象类  子类可以选择是否重写。
   3.父类是普通类,子类是抽象类。这种情况也可以。
   4.抽象类中可不可以没有抽象方法。可以    5.普通类中可不可以有抽象方法。 不可以
   6.抽象类中有没有构造? 有  帮助子类实例化.
   7.关于abstract是否可以与static  final一起使用.
    static与abstract不可以  static修饰的方法可以通过类名调用。
    final与abstract不可以  这两个是完全相反的操作。
    private与abstract不可以  因为private私有化了,就不能被继承了。

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

回复 使用道具 举报
你弄个空参数的
回复 使用道具 举报
可以的,但是很少见,目的就是不让该类创建对象。AWT的适配器对象就是这种类。
通常这个类中的方法有方法体,但是没有内容。如:
abstract class Demo{
        void show1(){
  }
        void show2(){
  }
}

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

回复 使用道具 举报
抽象类可以没有抽象方法,但是如果你的一个类已经声明成了抽象类,即使这个类中没有抽象方法,它也不能再实例化,即不能直接构造一个该类的对象。
如果一个类中有了一个抽象方法,那么这个类必须声明为抽象类,否则编译通不过。

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

回复 使用道具 举报
祁振朋 发表于 2013-3-26 00:12
当然可以没有抽象方法,比如我不想让这个类被实例化,也就是说不能通过new来新建对象,就可以定义个抽象类 ...

{:soso_e179:} 回答的真细。。
回复 使用道具 举报
这个自然是可以的了。这么说吧,如果一个类中包含了抽象方法那这个类就一定是抽象类,反之如果某个类是抽象类,那么该类既可以包含抽象方法,也可以包含具体方法,当然也可以不包含抽象方法,但是那样没有意义,就又变成了一个普通的类了。

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马