Java 当抽象类实现接口方法时,这些方法的处理方式是否与该抽象类的常规方法相同?

Java 当抽象类实现接口方法时,这些方法的处理方式是否与该抽象类的常规方法相同?,java,interface,abstract-class,abstract,Java,Interface,Abstract Class,Abstract,好的,我试图理解抽象类如何处理接口的实现方法。 假设我们有一个抽象类,它实现了一个接口的3个方法,我们将在另一个类中初始化这个抽象类,我们只需要实现这些接口方法中的一个。它工作得很好,我只是想了解java在初始化抽象类时是如何重写接口方法的。我只是想知道整件事是怎么回事 public abstract class AnimationListenerAdapter implements Animation.AnimationListener { @Override publi

好的,我试图理解抽象类如何处理接口的实现方法。 假设我们有一个抽象类,它实现了一个接口的3个方法,我们将在另一个类中初始化这个抽象类,我们只需要实现这些接口方法中的一个。它工作得很好,我只是想了解java在初始化抽象类时是如何重写接口方法的。我只是想知道整件事是怎么回事

public abstract class AnimationListenerAdapter implements Animation.AnimationListener
{   
    @Override
    public void onAnimationStart(Animation animation)
    {

    }

    @Override
    public void onAnimationEnd(Animation animation)
    {

    }

    @Override
    public void onAnimationRepeat(Animation animation)
    {

    }
}
  • 如果
    抽象类A
    实现了
    接口B
    A
    可以实现也可以不实现
    B
    中声明的抽象方法:

    • A
      中实现的方法将是具体的、实现的方法,您可以在直接或间接扩展
      A
      的类实例上调用这些方法

    • 未在
      A
      中实现的方法必须在第一个遇到的(层次结构中)具体类中实现,该类扩展了
      A

      接口的抽象方法必须在其实现者抽象类中实现,或者这些抽象方法的实现责任可以移交给扩展该抽象类的具体类

  • 不能显式初始化(也不能实例化)抽象类。初始化抽象类字段的唯一方法是实例化其子具体类,并且子类的构造函数调用抽象类的构造函数

  • 如果
    抽象类A
    实现了
    接口B
    A
    可以实现也可以不实现
    B
    中声明的抽象方法:

    • A
      中实现的方法将是具体的、实现的方法,您可以在直接或间接扩展
      A
      的类实例上调用这些方法

    • 未在
      A
      中实现的方法必须在第一个遇到的(层次结构中)具体类中实现,该类扩展了
      A

      接口的抽象方法必须在其实现者抽象类中实现,或者这些抽象方法的实现责任可以移交给扩展该抽象类的具体类

  • 不能显式初始化(也不能实例化)抽象类。初始化抽象类字段的唯一方法是实例化其子具体类,并且子类的构造函数调用抽象类的构造函数


  • 问题是你的抽象类在这里并不是很抽象。它完全实现了接口的。。。什么也不做

    因此,当您执行“new AnimationListenerAdapter()”时,您不再需要提供这三个方法的实现,因为它已经有一个实现了!但是,您正在为onAnimationEnd提供一个新的实现,它现在扩展了AnimationListenerAdapter中的实现(它实现了Animation.AnimationListener中的实现)


    简言之,从抽象类到接口都有第一层实现(尽管这里不是真正的抽象类,但您可以删除抽象,其中没有抽象…),然后,您的类和匿名类之间有第二层继承,覆盖其方法之一。

    问题是您的抽象类在这里不是真正抽象的。它完全实现了接口的。。。什么也不做

    因此,当您执行“new AnimationListenerAdapter()”时,您不再需要提供这三个方法的实现,因为它已经有一个实现了!但是,您正在为onAnimationEnd提供一个新的实现,它现在扩展了AnimationListenerAdapter中的实现(它实现了Animation.AnimationListener中的实现)


    简言之,从抽象类到接口都有第一层实现(尽管这里不是真正的抽象类,但您可以删除抽象,其中没有抽象…),然后在类和匿名类之间有第二层继承,覆盖其方法之一。

    如果抽象类实现了它们,则它们是普通(定义的)方法,在具体子类中可用/继承。如果抽象类实现了它们,则它们是普通(定义的)方法,在具体的子类中可用/继承。没错,这里没有抽象方法。这里的问题是,我基于官方的AnimatorListeneraAdapter类编写了这个类,我认为它是声明的抽象,因为它没有意义,不应该被实例化。我说得对吗?关于我的问题,不管我的类是抽象的还是非抽象的,它的实现方法都是完整的,除非在扩展类中声明了不同的实现。这里的问题是,我基于官方的AnimatorListeneraAdapter类编写了这个类,我认为它是声明的抽象,因为它没有意义,不应该被实例化。我说得对吗?关于我的问题,不管我的类是抽象的还是非抽象的,它的实现方法都是完整的,除非在扩展类中声明了不同的实现。
    fadeIn.setAnimationListener(new AnimationListenerAdapter(){
        @Override
        public void onAnimationEnd(Animation animation)
        {
            System.out.println("Anim Ended!");
        }
    });