【问题标题】:Constructor in Interface and abstract?接口和抽象中的构造函数?
【发布时间】:2017-04-07 04:50:22
【问题描述】:

假设我有这个界面:

public interface IBox
{
     public void onEvent(int eventType, View control, Object data);
}

我有一个班级可以访问它:

  public class Rectangle 
    {
    private IBox onEvent;


public Rectangle(Context context, View rowRoot) {
        super(context);
        onEvent = (Rectangle) context;
    }
      @Override

    public void onClick(View v) {

        switch (v.getId()) {
        case R.id.buttonClick:
                // send data : data1 and data2;
                onEvent.onEvent(data1,null, data2);
            break;
    }

我有一个类实现IBox

 public abstract class BaseActivity implements IBox
    {
    @Override
        public void onEvent(int data1, View data, Object data2)
       {
      //do something here
       }
    }

而且我有类扩展 BaseActivity 类:

public class HomeBaseActivity extends BaseActivity
{
   // transit Activity here, or send intent....
}

最后我有类 main 扩展 HomeBaseActivity:

public class HomeActivity extends HomeBaseActivity 
     {

            @Override
            public void onEvent(int data1, View data, Object data2)
           {
          switch (data1) {
           //reciver data1 from class Rectangle
           }
     }

我的问题:

1、为什么data1可以在HomeActivity类中接收?

2,哪位大神能解释一下,帮帮我?

// 一个有垃圾英语,所以谢谢

【问题讨论】:

  • 您发布的代码将不起作用,因为类Rectangle 中的变量onEvent 从未初始化。它可以工作在你的真实代码中的某个地方,将HomeActivity 类的对象分配给Rectangle 类中的变量onEvent
  • 抱歉,您的问题不清楚; 为什么 data1 可以接收 ...你是什么意思?
  • @Timothy Truckle:对不起,我在构造函数中初始化了,但没有必要,所以我不发帖,我编辑了
  • @GhostCat :意思是:在 HomeActivity 类中,reciver data1 成功,如何发送?我不明白。
  • @manhthang 你不能这样做:onEvent = (Rectangle) context;RectangleIBoxContext 没有任何关系。

标签: java android interface abstract-class


【解决方案1】:

我理解您想知道为什么从Rectangle 中的onClick() 中,我们可以将值传递给HomeActivity 中的onEvent() 并假设您的活动正在扩展Context(每个活动都必须扩展@987654327 @)。

让我们看看这里。 HomeActivity 正在扩展 HomeBaseActivity,它正在实现 IBox。基本上,new HomeActivity() 的对象可以转换为IBox[1]

此外,正如我上面的假设,您的活动正在扩展Context[2]

[1][2] => HomeActivity 的实例可以转换为 IBoxContext

让我们将HomeActivity 的对象传递给您的Rectangle(被转换为Context)并分配给onEvent 属性(现在被转换为IBox)。

现在在您的onClick()onEvent.onEvent(data1,null, data2); 中只需简单地调用您在HomeActivity 中实现的onEvent() 方法。这就是为什么你可以将data1 传递给HomeActivity

详细了解 Java 中的接口和继承here

P/s:如果你英文阅读有困难,就问吧,这次我可以用你的母语私下给你解释。努力提高你的英语,至少让每个人都能理解你。因为这里我们用英语讨论。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多