ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2019-08-25 12:28:13  阅读:199  来源: 互联网

标签:android java interface abstract-class


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

我正在审查一个看起来像我想要使用的项目的一些代码,我看到了一些对我感兴趣的东西,因为我不确定为什么要这样做.具体来说,在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.
 * <p/>
 * You should <strong>not</strong> 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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有