黑马程序员技术交流社区

标题: 关于抽象类的问题 [打印本页]

作者: Massive    时间: 2013-11-7 18:45
标题: 关于抽象类的问题
abstract class Demo {
        abstract  void show();
}

class DemoA extends Demo {
        void show() {
                System.out.println("demoa show");
        }
}

class DemoB extends Demo {
        void show() {
                System.out.println("demob show");
        }
}

DemoA继承了Demo之后,对他里面的方法是直接可以用呢还是要重写才能用呢?
对这里不太明白求解!

作者: Mr.Z.Lee    时间: 2013-11-7 19:02
抽象类的方法需要被子类重写才可以实例化,多看看张孝祥老师的基础视频
作者: 帅气的冬瓜    时间: 2013-11-7 19:18
抽象类特点:1、抽象方法一定在抽象类中
                  2、抽象方法和抽象类都必须被abstract关键字修饰
                  3、抽象类不可用new创建,因调用无意义
                  4、抽象类中的抽象方法要被使用。必须由子类复写起所有的抽象方法后,建立子类对象调用
    抽象类不可实例化,抽象类中可以不定义抽象方法,这样做是不被创建对象。
作者: 明月几时有    时间: 2013-11-7 19:23
本帖最后由 明月几时有 于 2013-11-7 19:34 编辑

abstract class Demo {                      //这是一个抽象类
         abstract  void show();            //这是一个抽象方法,抽象方法一定要被重写才能用,因为它没有方法体,生来就是要被重写的,重写了才有具体的意义
}
class DemoA extends Demo {
         void show() {                                                //这里重写了抽象类的抽象方法show()
                 System.out.println("demoa show");     
         }
}

class DemoB extends Demo {
         void show() {
                 System.out.println("demob show");
         }
}
如果要使用子类中重写后的show()方法,就要在另外一个类中创建对象调用,再添加如下代码即可
        DemoA da =new DemoA( );      
        DemoB db =new DemoB( );
         da.show( );                                //调用DemoA类中的show方法
         db.show( );                               //调用DemoB类中的show方法

作者: ~﹏~    时间: 2013-11-7 19:24
抽象类的抽象方法必须重写才可以使用,
抽象类的普通方法可已直接使用
作者: 张秀威    时间: 2013-11-7 20:48
  1. abstract class Demo {
  2.         abstract  void show();
  3. }

  4. class DemoA extends Demo {
  5.         void show() {
  6.                 System.out.println("demoa show");
  7.         }
  8. }

  9. class DemoB extends Demo {
  10.         void show() {//这里继承并覆盖了Demo类中的抽象方法,必须建立子类对象才能调用的
  11.                 System.out.println("demob show");
  12.         }
  13. }
复制代码
抽象类特点:1、抽象方法一定在抽象类中
                  2、抽象方法和抽象类都必须被abstract关键字修饰
                  3、抽象类不可用new创建,因调用无意义
                  4、抽象类中的抽象方法要被使用。必须由子类复写起所有的抽象方法后,建立子类对象调用
   抽象类和一般类没有太大的区别的。
抽象类比一般类多 了个抽象函数,就是在类中可以定义抽象方法,抽象类不可以实例化(类中不明确的事物,创建不知干什么)
楼主这下对抽象类有一点的了解了吧。。。
当然还要注意一点抽象类的特殊之处:就是抽象类中可以不定义抽象方法,这样做仅仅是不让该类建立对象(作用)。。。
作者: zdrain    时间: 2013-11-7 20:51
呵呵,这么可爱一定是女孩子,嘻嘻,我来解答你的问题。

DemoA继承Demo之后呢,他的内部非抽象方法可以直接拿来用哦,例如Demo里要是有func(){。。。}就可以直接建立子类DemoA的引用调用func()方法

但是呢,如果是抽象方法就不一样了,因为抽象方法没有方法体,无法确定他的功能,所以要其子类对其抽象方法进行复写,这样方法就有了存在的意义了,懂了吗?如果不复写的话,子类继承了抽象方法那么这个子类也是抽象类啦。
作者: ☆星痕泪    时间: 2013-11-7 23:09
朋友,你可以再仔细看看老毕的那几段视频,毕老师将的很清楚,
抽象类的方法因为是抽象的所以无法new对象,是需要继承抽象类,子类复写里面的抽象方法,所以对你说父类里的方法不能直接调用,需要重写才能调用。
呵呵,视频要多仔细看看,不懂先想再百度,再到论坛。加油!!!
作者: spiderman    时间: 2013-11-7 23:41
首先,如果继承抽象类,你不重写,那么子类也是抽象类,抽象类是不能创建对象的。
其次,如果你不重写,那么这个方法是没办法使用的。
最后,还是看看毕老师的视频吧,这都是基本的概念,没有为什么,这是乌龟的屁股——固定。。。
作者: 卑微の小幸福    时间: 2013-11-7 23:43
之所以要把这个类抽象  就是为了让继承他的类复写他的方法。 呵呵。 所以当然是要重写了才能用了




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