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