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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 苏伯亚 中级黑马   /  2014-4-11 18:53  /  1514 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

毕老师讲抽象的时候说过
抽象类中的抽象方法要被使用,必须由子类复写起所有的抽象方法后,建立子类对象调用。如果子类只覆盖了部分抽象方法,那么该子类还是一个抽象类。

而我们知道抽象类是不能被实例化的。这样就有点不懂 下面的代码:
abstract class Student
{
        abstract  void study();
        //abstract void study1();
        void sleep()
        {
                System.out.println("躺着");
        }
}




class ChongCiStudent extends Student
{
        void study()
        {
                System.out.println("chongci study");
        }
}
lass AbstractDemo
{
        public static void main(String[] args)
        {
                new ChongCiStudent().sleep();
        }
}

student是抽象类ChongCiStudent类继承了它,但是并没有全部敷写Student中的方法。这样应该就还是抽象类,但是却还是能建立实例化和调用抽象类Student中的方法,是我理解有问题还是代码那里错了 。求解释。


8 个回复

倒序浏览
搭车 同求啊 这块也不动
回复 使用道具 举报
“student是抽象类ChongCiStudent类继承了它,但是并没有全部敷写Student中的方法。这样应该就还是抽象类”
应该是“student是抽象类ChongCiStudent类继承了它,但是并没有全部敷写Student中的【抽象】方法。这样应该就还是抽象类”。
也就是抽象类中也是有非抽象方法的,子类继承了抽象类了就必须复写父类中【全部的抽象方法】,而不必复习父类中的非抽象方法,这样子类就不是抽象类,也就可以创建对象了
  1. abstract class Student
  2. {
  3.         abstract  void study();//抽象方法必须复写,子类中void study()有复写
  4.         //abstract void study1();//如果把左边这句代码加入,这子类就只能是抽象类了
  5.         void sleep()//非抽象方法,不必复写
  6.         {
  7.                 System.out.println("躺着");
  8.         }
  9. }




  10. class ChongCiStudent extends Student
  11. {
  12.         void study()
  13.         {
  14.                 System.out.println("chongci study");
  15.         }
  16. }
复制代码

评分

参与人数 1黑马币 +1 收起 理由
Kelvinhu + 1 很给力!

查看全部评分

回复 使用道具 举报
本帖最后由 Kelvinhu 于 2014-4-11 19:21 编辑

原来是这样Description        Resource        Path        Location        Type
The type ChongCiStudent must implement the inherited abstract method Student.study1()        AbstractDemo.java        /Chat/src        line 14        Java Problem


必须全部实现抽象方法,否则也是抽象类。。
回复 使用道具 举报
fufeng 发表于 2014-4-11 19:11
“student是抽象类ChongCiStudent类继承了它,但是并没有全部敷写Student中的方法。这样应该就还是抽象类” ...

谢谢 确实 给sleep加上抽象修饰后就报错了  懂了 谢谢
回复 使用道具 举报
只需要复写抽象类中的抽象方法就行了,
回复 使用道具 举报
宋丹 中级黑马 2014-4-11 20:53:22
7#
  1. abstract class Student
  2. {
  3.         abstract  void study();//z这个方法是抽象方法
  4.         //abstract void study1();
  5.         void sleep()//sleep()方法不是抽象方法
  6.         {
  7.                 System.out.println("躺着");
  8.         }
  9. }




  10. class ChongCiStudent extends Student
  11. {
  12.         void study()//复写父类的抽象方法
  13.         {
  14.                 System.out.println("chongci study");
  15.         }
  16. }
  17. lass AbstractDemo
  18. {
  19.         public static void main(String[] args)
  20.         {
  21.                 new ChongCiStudent().sleep();
  22.         }
  23. }
复制代码

Student类中有两个方法,其中sleep()不是抽象方法,而study()是抽象方法,而它的子类在继承它的时候只需要复写抽象方法即可,非抽象方法可以复写(如果你要更新这个方法的话)也可以不复写

评分

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

查看全部评分

回复 使用道具 举报
你创建的子类的对象调用父类的的方法并不是抽象的呀,如过sleep方法是抽象的
你肯定不能调用的,子类必须要复写。如果不复写子类也是抽象类,并不能创建
对象
回复 使用道具 举报
抽象类的子类只需要重写抽象类中的抽象方法,其他的非抽象方法是被继承下来了。只要子类全部重写了父类的抽象方法,子类就可以实例化,并且调用父类的方法
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马