[英]When an abstract class implements interface methods, are those methods treated same way as regular methods of that abstract class?
好的,我试图了解抽象类如何处理接口的已实现方法。 假设我们有一个抽象类,它实现了一个接口的 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)
{
}
}
fadeIn.setAnimationListener(new AnimationListenerAdapter(){
@Override
public void onAnimationEnd(Animation animation)
{
System.out.println("Anim Ended!");
}
});
如果abstract class A
实现了interface B
,则A
可能会也可能不会实现B
声明的抽象方法:
在A
实现的方法将是具体的实现方法,您可以在类的实例上调用/调用直接或间接扩展A
;
未在A
实现的方法必须在第一个遇到的(在层次结构中)扩展A
具体类中实现。
接口的抽象方法,必须在其实现者抽象类中实现,或者实现这些抽象方法的责任,可以移交给扩展该抽象类的具体类
您不能初始化(也不能实例化),因此,您的抽象类显式。 抽象类的字段被初始化的唯一方法是当它的子具体类被实例化并且子类的构造函数调用抽象类的构造函数时。
问题是您的抽象类在这里并不是真正抽象的。 它通过……什么都不做来完全实现接口。
因此,当您执行“new AnimationListenerAdapter()”时,您不再需要提供这三种方法的实现,因为它已经有了一个实现! 但是,您正在为 onAnimationEnd 提供一个新的实现,它现在扩展了来自 AnimationListenerAdapter 的实现(它实现了来自 Animation.AnimationListener 的实现)。
简而言之,您有从抽象类到接口的第一层实现(即使这不是真正的抽象类,您可以删除抽象,其中没有任何抽象......),然后您有你的类和你的匿名类之间的第二层继承覆盖了它的一个方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.