抽象子类在Java中是如何工作的?

抽象子类在Java中是如何工作的?,java,abstract-class,Java,Abstract Class,我们可以有一个具体的超类,然后是一个抽象的子类吗?有人能解释一下这是怎么回事吗 谢谢这已经在任何地方发生了,因为所有类都直接或间接地继承自对象。例如,AbstractCollection是一个从具体类Object继承的抽象类 这没有什么特别的。抽象类的具体子类仍然必须实现抽象方法。这已经到处发生,因为所有类都直接或间接地从对象继承。例如,AbstractCollection是一个从具体类Object继承的抽象类 这没有什么特别的。抽象类的具体子类仍然必须实现抽象方法。你可以这样做是的。类抽象的唯

我们可以有一个具体的超类,然后是一个抽象的子类吗?有人能解释一下这是怎么回事吗


谢谢

这已经在任何地方发生了,因为所有类都直接或间接地继承自
对象
。例如,
AbstractCollection
是一个从具体类
Object
继承的抽象类


这没有什么特别的。抽象类的具体子类仍然必须实现抽象方法。

这已经到处发生,因为所有类都直接或间接地从
对象继承。例如,
AbstractCollection
是一个从具体类
Object
继承的抽象类


这没有什么特别的。抽象类的具体子类仍然必须实现抽象方法。

你可以这样做是的。类抽象的唯一限制是:

  • 继承时,必须实现抽象方法,或者继承的类也必须是抽象的

  • 它不能被实例化

  • 由于抽象类可以实现方法,因此在抽象类中定义方法时,可以使用非抽象超类的方法。此外,从抽象类继承的人从非抽象超类获得方法,如下所示:

    汽车继承抽象汽车继承法拉利


    然后法拉利将获得车辆的实际实施方法。

    你可以拥有它是的。类抽象的唯一限制是:

  • 继承时,必须实现抽象方法,或者继承的类也必须是抽象的

  • 它不能被实例化

  • 由于抽象类可以实现方法,因此在抽象类中定义方法时,可以使用非抽象超类的方法。此外,从抽象类继承的人从非抽象超类获得方法,如下所示:

    汽车继承抽象汽车继承法拉利


    然后法拉利将得到车辆的实际实现方法。

    是的,你可以,只要你不扩展这个类,你就不必实现任何方法

    Abstract class AbstractClass extends ConcreteClass{
        public abstract void method();
    }
    
    class ConcreteClass {
        public void doSomething(){
    
        }
    }
    
    在AbstractClass中,您不必实现doSomething方法,在ConcreteClass中,您不必实现方法()。 如果你自己试试就更好了,我建议你读这本书

    谢谢,
    Khalil。

    是的,你可以,只要你不扩展这个类,你就不必实现任何方法

    Abstract class AbstractClass extends ConcreteClass{
        public abstract void method();
    }
    
    class ConcreteClass {
        public void doSomething(){
    
        }
    }
    
    在AbstractClass中,您不必实现doSomething方法,在ConcreteClass中,您不必实现方法()。 如果你自己试试就更好了,我建议你读这本书

    谢谢,
    Khalil.

    您可以这样做,前提是您扩展的具体类不是最终类。和所有抽象类一样,它们不能被实例化

    例如,如果您希望您的继承者重新实现某些方法。。。说:

    public abstract class MustHaveEqualsAndHashCode()
    {
        @Override
        public abstract int hashCode();
    
        @Override
        public abstract boolean equals(Object obj);
    }
    

    但是请注意,这是非常罕见的。大多数情况下,可以用合成来代替它。如果扩展的具体类不是最终类,则可以这样做。和所有抽象类一样,它们不能被实例化

    例如,如果您希望您的继承者重新实现某些方法。。。说:

    public abstract class MustHaveEqualsAndHashCode()
    {
        @Override
        public abstract int hashCode();
    
        @Override
        public abstract boolean equals(Object obj);
    }
    

    但是请注意,这是非常罕见的。大多数情况下,它可以被合成物代替。

    为什么不试试呢?我不明白为什么这不可能。您可以创建一个类并扩展它,然后将子类命名为抽象类。用这两种语言编写一些system.out.println语句。决定可以创建哪个类实例,并检查输出内容。如果你有疑问,请尽管问,我们会帮助你,我们可以,但不应该。@Bheshgurhung:真的吗?鉴于
    java.lang.Object
    是一个具体的类,我看不出如何避免它……为什么不试试呢?我不明白为什么这不可能。您可以创建一个类并扩展它,然后将子类命名为抽象类。用这两种语言编写一些system.out.println语句。决定可以创建哪个类实例,并检查输出内容。如果你有疑问,请尽管问,我们会帮助你,我们可以,但不应该。@Bheshgurhung:真的吗?考虑到
    java.lang.Object
    是一个具体的类,我看不出如何避免它。。。