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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 〃Mr.Zぐ 中级黑马   /  2013-4-10 11:43  /  1481 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

抽象类可以不包括抽象方法 但是含有抽象方法的类必须是抽象类。这句话怎么理解呢?

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

8 个回复

正序浏览
hacket 高级黑马 2013-4-10 15:17:21
9#
  1. abstract class A //抽象类A
  2. {
  3.         public abstract void show();//抽象方法show()
  4.         public void run(){ //抽象类中的具体方法run()
  5.                 System.out.println("抽象类中的具体方法");
  6.         }
  7. }
  8. class B extends A //类B继承A,并实现了A的的抽象方法show(),故可以new对象
  9. {
  10.         public void show(){};
  11. }
  12. abstract class C extends A//类C继承抽象类A,但没有实现抽象方法,故应声明为抽象类,也不能new对象
  13. {
  14.                 public abstract void show();
  15. }
  16. public class AbstractDemo
  17. {
  18.         public static void main(String[] args){
  19.                
  20.                 //A a = new A();//报错
  21.                 A b = new B();
  22.                 //A c = new C();//报错
  23.         }
  24. }
  25. /*
  26.         总结:
  27.                 1.抽象类存在的意义是用来被继承的。一个类继承了一个抽象类,必须实现抽象类里面所有的抽象方法,否则,此类也是抽象类。
  28.                 2.抽象类和抽象方法的关系:含有抽象方法的类一定是抽象类,抽象类里不一定含有抽象方法
  29. */
复制代码

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
http://bbs.itheima.com/thread-44617-1-1.html,  老师写的这个很详细。抽象类可以不包括抽象方法,有抽象方法的类一定是抽象类。

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
意思就是说。抽象类可以是完全没有抽象方法的  抽象类,但是这样做的唯一作用就是,不让该类实例化
有抽象方法的类必须是抽象类,就是说,只要该类中含有抽象方法,无论该类有多少一般类,该类都是抽象类,并且不能够实例化

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
只要包含了抽象方法,该类就不能被实例化,因为有抽象方法需要具体实现,因此该类必然是抽象类。
即使不包括任何abstract 方法,亦可将一个类声明成“抽象类”。如果一个类没必要拥有任何抽象方法,而且我们想禁止那个类的所有实例,这种能力就会显得非常有用。

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
在java中,含有抽象方法的类称为抽象类, 凡是包含纯虚函数的类都是抽象类。 抽象类是不完整的,并且它只能用作基类。它与非抽象类的不同:用 abstract 修饰的类是抽象类。抽象类中可以有一般的方法,但是只要是有了抽象方法就是抽象类了,因为这个抽象方法是需要被子类重写的,而且必须重写,java中的很多定义不能去追究为什么,这就是规定

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
我写个例子说下
  1. //这个是抽象类,但是里面没有抽象方法
  2. abstract class T{
  3.         public void save(){
  4.                 System.out.println(".......");
  5.         }
  6. }

  7. //这个类里面有抽象方法,因此这个 类必须定义成抽象的,否刚编译会出 错
  8. abstract class M{
  9.         public abstract void save();
  10. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
抽象类里面可以有非抽象方法(有实体,有内容代码执行的)
但是一个类里只要有一个抽象方法,那么这个类就是抽象类需被abstract修饰

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
意思就是说你定义的抽象的类里面可以有抽象的方法也可以有不是抽象的方法,但是如果定义的类里面有抽象的方法那么你就要定义成抽象的类,因为这方法没有功能的实现只是定义了一个有这样的方法,反之如果你不定成抽象类那么当你创建实例调用的时候就没有意义的了,而当你定义成抽象的类,就说明这个类一定要要被其继承的类实现里面的抽象的方法,当你没有实现的时候就会出现问题。

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

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