黑马程序员技术交流社区

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

作者: daoyua    时间: 2014-1-9 10:21
标题: 抽象类的子类问题
一个抽象类的子类中,可以只实现父类父类的一个方法而建立对象么
作者: 也,许。    时间: 2014-1-9 11:30
不可以的吧,如果子类只覆盖了父类中的部分抽象方法,那么这个子类还是一个抽象类,不能够创建对象调用方法。如果想使用抽象类中的方法,就必须由子类复写其所有的抽象方法以后,建立子类对象来调用。
作者: 花生壳    时间: 2014-1-9 12:49
这个不可以,子类继承父类(抽象类),必须复写父类中所有抽象方法。才可以new 对象
抽象类中可有抽象和非抽象方法!但是类里面有抽象方法的类必须是抽象类

接口必须要实现里面的所有方法!
作者: 渐渐不懂了    时间: 2014-1-9 13:53
不可以,抽象类不可建立对象
作者: LuckyQS    时间: 2014-1-9 14:02
抽象类中的抽象方法要被使用,必须由子类复写起所有的抽象方法后,建立子类对象调用。
如果子类只覆盖了部分抽象方法,那么该子类还是一个抽象类。
作者: 路西法    时间: 2014-1-9 15:57
老毕归纳的抽象类特点第四条:只有通过子类继承抽象类并覆盖抽象类中的所有抽象方法后,该子类才可以实例化。否则,该子类还是一个抽象类。

由此可见 你说的情况是不可以的。
作者: daoyua    时间: 2014-1-10 16:32
我的意思不是你们说的那个,距离父类有2个抽象方法method1,和method2,第一个子类AZ只实现method1,A虽然还是抽象类,但是A的子类可以只实现method1啊,method2就不用管啦
作者: 贺利英    时间: 2014-1-10 20:03
那是不可以的,因为父类有两个抽象的方法,它的子类A的子类(假设为)B依然是父类的子类,所以,如果B只是实现了父类中的一个抽象方法method1,而没有实现方法method2,那么此子类B依然是抽象的,所以此子类B也是没办法建立对象的。下面是程序以及结果,你也可以自己验证一下。

作者: 贺利英    时间: 2014-1-10 20:11
abstract class Person
{
        abstract void show();
        abstract void method();
}

abstract class A extends Person
{
        public void show()     //此类中只是实现了抽象父类中的一个方法
        {                      //所以此子类依然是抽象的。
       
                System.out.println("java");
        }
}
class B extends A         //此子类B继承了A。
{
        public void show()
        {
                System.out.println("java////");
        }
}

class AbstractDemo
{
        public static void main(String[] args)
        {
                B b=new B();
                b.show();
               
                //System.out.println("Hello World!");
        }
}
结果你验证一下吧,我这边出了点问题,截图不成的,不好意思啊!!!!

作者: daoyua    时间: 2014-1-10 20:46
嘿嘿,可以哦,我给你发代码
作者: daoyua    时间: 2014-1-10 20:47
abstract class Person
{
         abstract void show();
         abstract void method();
}

abstract class A extends Person
{
         public void show()     //此类中只是实现了抽象父类中的一个方法
         {                      //所以此子类依然是抽象的。
         
                System.out.println("java");
         }
}
class B extends A         //此子类B继承了A。
{
         public void method()
         {
                 System.out.println("java////");
         }
}

class Demo
{
         public static void main(String[] args)
        {
                 B b=new B();
                 b.method();
                 
                //System.out.println("Hello World!");
         }
}
作者: 贺利英    时间: 2014-1-10 21:39
可以什么?你的能编译成功吗?
作者: DOOR    时间: 2014-1-10 22:26
可以,如果父类只有一个抽象方法的话,子类复写掉父类仅有的一个抽象方法,子类就变不抽象了,不抽象就可以new对象了。
作者: daoyua    时间: 2014-1-10 23:29
当然行,你看我写的代码,我改了下的
作者: 贺利英    时间: 2014-1-11 12:16
嗯我看到了 嗯我验证了一下 可以的 以前没有注意到这个问题  谢谢你啊 自己又掌握了一个知识点 嘿嘿嘿
作者: 姜胜凯    时间: 2014-1-11 19:11
如果你的父类是只有一个抽象方法,那么可以。要不你必须覆盖父类的所有抽象方法才可以创建对象~
作者: tf996268809    时间: 2014-1-11 21:31
若是父类只有一个抽象方法,可以只重写这一个方法建立子类对象,若是有多个抽象方法,必须都重写后才能建立对象,否则子类也变成了抽象类




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