java可以没有成员变量_java – 在没有成员变量的情况下创建抽象类的重点是什么?...

这个问题实际上比主题更具体,但我认为这个主题通常涵盖了我想知道的内容.

我正在审查一个看起来像我想要使用的项目的一些代码,我看到了一些对我感兴趣的东西,因为我不确定为什么要这样做.具体来说,在Chris Banes的ActionBar-PullToRefresh中,我在.java中看到了这个:

package uk.co.senab.actionbarpulltorefresh.library;

import android.app.Activity;

import android.content.res.Configuration;

import android.view.View;

/**

* HeaderTransformers are what controls and update the Header View to reflect the current state

* of the pull-to-refresh interaction. They are responsible for showing and hiding the header

* view, as well as update the state.

*/

public abstract class HeaderTransformer {

/**

* Called whether the header view has been inflated from the resources

* defined in {@link Options#headerLayout}.

*

* @param activity The {@link android.app.Activity} that the header view is attached to.

* @param headerView The inflated header view.

*/

public void onViewCreated(Activity activity, View headerView) {}

/**

* Called when the header should be reset. You should update any child

* views to reflect this.

*

* You should not change the visibility of the header

* view.

*/

public void onReset() {}

/**

* Called the user has pulled on the scrollable view.

*

* @param percentagePulled value between 0.0f and 1.0f depending on how far the

* user has pulled.

*/

public void onPulled(float percentagePulled) {}

/**

* Called when a refresh has begun. Theoretically this call is similar

* to that provided from {@link uk.co.senab.actionbarpulltorefresh.library.listeners.OnRefreshListener} but is more suitable

* for header view updates.

*/

public void onRefreshStarted() {}

/**

* Called when a refresh can be initiated when the user ends the touch

* event. This is only called when {@link Options#refreshOnUp} is set to

* true.

*/

public void onReleaseToRefresh() {}

/**

* Called when the current refresh has taken longer than the time

* specified in {@link Options#refreshMinimizeDelay}.

*/

public void onRefreshMinimized() {}

/**

* Called when the Header View should be made visible, usually with an animation.

*

* @return true if the visibility has changed.

*/

public abstract boolean showHeaderView();

/**

* Called when the Header View should be made invisible, usually with an animation.

*

* @return true if the visibility has changed.

*/

public abstract boolean hideHeaderView();

/**

* Called when the Activity's configuration has changed.

*

* @param activity The {@link android.app.Activity} that the header view is attached to.

* @param newConfig New configuration.

*

* @see android.app.Activity#onConfigurationChanged(android.content.res.Configuration)

*/

public void onConfigurationChanged(Activity activity, Configuration newConfig) {}

}

我对这个文件的问题是为什么这里的抽象类而不是接口或者完成抽象类的目的是什么?我看到该类有两个抽象方法.我的理解是抽象方法必须在子类中定义,否则子类也是一个抽象类吧?那么这是作为一个抽象类完成的,以便只强制执行这两个抽象方法吗?这是在这里做抽象类而不是接口的唯一原因吗?

解决方法:

将它作为一个抽象类可能有很多原因,其中一些是你自己指出的.

我在这种情况下的猜测是因为它是一个库.

假设您有一个庞大的应用程序,并使用此类来定义许多其他类.

如果通过添加新方法来更新类,则如果代码是接口,则代码将无法编译,因为您的代码违反了接口的“契约”(它没有实现所有方法).但在这种情况下,它是一个抽象类,可以定义默认行为:在这种情况下,什么都不做.所以你的应用程序不会破坏,编译没有任何问题.

标签:android,java,interface,abstract-class

来源: https://codeday.me/bug/20190825/1718405.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值