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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 于清云 中级黑马   /  2012-4-22 23:05  /  1958 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

什么时候使用抽象类?
当满足以下的条件时,最好使用抽象类进行设计:
a)子类不继承其它父类
b)子类中存在完全相同的功能实现的方法
c)子类中存在相同的属性
d)设计出的结构需要继承其它类
当需要满足 d 条件时,只能使用抽象类,否则也可以考虑使用接口实现。

我的疑问:对于这四个条件 我还是不大明白,求教大虾指点

6 个回复

倒序浏览
抽象类是通过子类向上抽取,但是子类的方法体是不同的,所以定义一个没有具体方法体的方法,所以子类继承后,必须复写该方法。从而该类也就成了抽象类。当这个类中的方法全定义成抽象方法时,则该类可以定义为接口了。
回复 使用道具 举报
你现在可以不用明白这些,等你用多了自然就会明白了,以前我对这些也都是很模糊。一个含有抽象方法的类就是抽象类,那什么时候用抽象方法呢。我给你个提示吧。当我们写程序的时候,好多共同的方法都想把他共用,比如一个获得连接的方法吧,public Connection getConnection()如果你要在你的两个子类中获得不同的连接那你怎么办呢,这个父类必须提供这个方法给你让你去调用,可是你不同的子类的连接是不同的,那么就需要把这个方法定义成抽象的,那么在你子类里就可以实现这个方法了。那么你又会说我在子类里实现了还用父类的干嘛呢,其实这里我只是打个比喻,因为你父类里可能是执行一个查询方法,这个查询方法调用了父类的getConnection()方法。这样说你明白了么。我说的可能不是很清楚,你好好分析下。
回复 使用道具 举报
赵嘉男 发表于 2012-4-22 23:14
你现在可以不用明白这些,等你用多了自然就会明白了,以前我对这些也都是很模糊。一个含有抽象方法的类就是 ...

呵呵 有点蒙了
回复 使用道具 举报
liuhao411 发表于 2012-4-22 23:11
抽象类是通过子类向上抽取,但是子类的方法体是不同的,所以定义一个没有具体方法体的方法,所以子类继承后 ...

谢谢了啊
回复 使用道具 举报
多个类中出现相同功能,但是功能主体不同,这时可以进行向上抽取。只抽取功能定义,而不抽取功能主体,在抽取的过程中就形成了抽象类。
抽象类和一般类没有太大的不同。该如何描述事物,就如何描述事物,只不过,该事物出现了一些看不懂的东西。
这些不确定的部分,也是该事物的功能,需要明确出现。但是无法定义主体(子类功能一致,而功能主体却不同)。
这时就通过抽象方法来表示。
抽象类比一般类多个抽象函数。就是在类中可以定义抽象方法。抽象类不可以实例化。
抽象类的特殊用处:抽象类中不定义抽象方法,这样做仅仅是不让该类建立对象。

回复 使用道具 举报
abstract class Student//抽象类
{
        abstract final void study();//抽象方法
        abstract void study1();//没有方法体的方法用abstract修饰,具体功能由子类来实现
        void sleep()//抽象类中也可以有非抽象方法
        {
                System.out.println("躺着");
        }
}
class Student1
{
    void study()
  {
  }
}
class Student2
{
    void study()
  {
  }

}
a)子类不继承其它父类
student1和student2不继承其它类,但只继承studnet类
b)子类中存在完全相同的功能实现的方法
student1和student2都有相同的功能:study,但功能主体不一样
c)子类中存在相同的属性
student1和student2都要学习(相同的属性)
d)设计出的结构需要继承其它类
我也不会解释。呵呵。不好意思啊。初学中。
想到了,在补充吧

注意:(抽象类中的抽象方法要被使用,必须由子类复写起所有的抽象方法后,建立子类对象调用。
如果子类只覆盖了部分抽象方法,那么该子类还是一个抽象类。)
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马