如果从一个抽象类继承,而且想生成新类型的一个对象,就必须为基础类中的所有抽象方法提供方法定义。如果不这样做(完全可以选择不做),则衍生类也会是抽象的,而且编译器会强迫我们用abstract关键字标志那个类的“抽象”本质。
问题:
如果类B从抽象类从A继重,类C继便类B,类C会不会是抽象类?
(假如类B都定义了抽象方法,类C没有定义抽象类A中的抽象方法)

解决方案 »

  1.   

    加一问题:interface和抽象类区别?
    大家帮我解决一下.
      

  2.   

    我写了代码测试过。C可以为抽象类。
    这是一个例子:
    abstract class a{
    public abstract String getName();

    }
    class b extends a{
    private String name;
    public b(String name){
    this.name = name;
    } public String getName()
    {
    return name;
    }
    }
    abstract class c extends b
    {
    public c(String name) {
    super(name);
    }
    public abstract void abc();
    }
    注意如果 构造函数带参数的话,那么继承的那个类必须有个带参数的构造函数。用来构造你继承过来类,比如这里的b类。
      

  3.   


       抽象类和一般类的不同在于:1.抽象类可以有抽象方法。2.抽象类不能被实例化。 
                                 3.如果抽象类A被B继承,那么B要么定义所有A中的抽象方法,要么B也作为一个抽象类。
       interface: 1.它也可以有域成员,但必须用static final 来修饰。
                    2.接口中的方法都是public的,所以声明时无须再加public修饰。接口中的方法不能定义方法体。
      
       再很少情况下,接口和抽象类是等价的。比如抽象类里除了抽象方法,没有别的了。但是接口更能起到规范的作用。
      

  4.   

    如果类B从抽象类从A继重,类C继便类B,类C会不会是抽象类? 
    (假如类B都定义了抽象方法,类C没有定义抽象类A中的抽象方法) 
    ----------------------------
    类B都定义了抽象方法是指都实现了抽象方法吗,如果是这样,B就不再是抽象类,那么C也就不是抽象类了。
    如果B只定义那些抽象方法并不全部实现那些抽象方法,那么B就是抽象类,这时候就看C继承B以后是否把B没完全实现的抽象方法实现,如果实现了,C就不是抽象类,如果没实现,C就是抽象类。加一问题:interface和抽象类区别? 
    ---------------------------
    一个类可以同时实现多个接口,可以弥补java不提供多继承的缺陷,抽象类只能单继承。
    接口的方法都没有具体实现,抽象类可以实现一部分方法,只要有一个方法没被实现,即有一个方法被定义为absctract,那么该类就是抽象类。
      

  5.   

    抽象类是看有没有abstract前缀  一个所有方法都不是抽象的类仍然可以加abstract,所以你第一条是判断不出来的
      

  6.   

    这个你可以自己做试验,如果父类是抽象类,子类没有完全实现父类的抽象方法,那么子类必须定义为抽象类,不存在现不显示的问题,不用abstact就是错误!
    如果子类实现了父类的抽象方法,那么子类也仍然可以定义为abstract,即使子类中一个abstract方法都没有,是不是抽象类完全取决于他有没有abstact,有就是,没有就不是
      

  7.   


    接口和抽象类都是不能实例化的个人认为他们差不多,但是由于JAVA只支持单一继承,但允许实现多个接口,如果你的一个类继承了另外一个类,那么只能使用实现接口咯,所以我认为在没有特殊情况下不要使用抽象类!
      

  8.   

    abstract 关键字定义抽象类