【问题标题】:How to run a method within a subclass from a superclass?如何在超类的子类中运行方法?
【发布时间】:2017-06-16 04:06:51
【问题描述】:

我有两个 java 文件。主要活动包含以下内容:

    String randomEvent;

    public void randomTrigger(){

        int min = 1;
        int max = 100;

        Random randomTrigger = new Random();
        int randomNumber = randomTrigger.nextInt(max - min) + min;

        RandomEvent obj = new RandomEvent();

        if (randomNumber == 7) {

            // What do I put here to call the method randomEvent(); in RandomEvent.java ?

        }


    }

    saveSettings();{
        SharedPreferences settings = getSharedPreferences("com.******.******", MODE_PRIVATE);
        settings.edit().putString("randomEvent", randomEvent).commit();
    }

名为“RandomEvent.java 的第二个活动是 MainActivity 的子类:

package com.******.******;

import android.content.SharedPreferences;

public class RandomEvent extends MainActivity {

    public void randomEvent() {

        MainActivity obj = new MainActivity();
        obj.randomEvent = "You've received a pay raise!";

        payRate = payRate * 1.1f;

        saveSettings();

    }
}

我的问题是,如何正确执行 randomEvent();位于超类 MainActivity 中的 RandomEvent.java 类文件中的方法?

【问题讨论】:

  • 如果你已经有 obj 作为 RandomEvent 实例( RandomEvent obj = new RandomEvent(); ),你可以简单地调用 obj.randomEvent();顺便说一句,那个设计不是很清楚。 MainActivity 现在如何成为子类。您可以按照模板方法模式实现类似的东西。
  • 对不起,如果我的措辞不清楚。 MainActivity 是 RandomEvent 的超类,它扩展了 MainActivity。
  • 如果你必须从父类调用子类方法,那么你需要在父类中声明相同的方法,这是继承的基本概念。

标签: java android android-studio subclass


【解决方案1】:

可以通过以下方式实现:-

public class MainActivity{
 public void randomEvent() {}  

}

public class RandomEvent extends MainActivity{
 @Override
 public void randomEvent() {
    //You stuff
 }   
}

在这种方法中,您可以从 MainActivity 调用 randomEvent。 但最好这样做:-

public interface Events{
  public void randomEvent();
}

public abstract class MainActivity implements Events{

}

public class RandomEvent extends MainActivity{
  @Override
 public void randomEvent() {
    //You stuff
 } 
}

如果您以这种方式保持代码清洁会更好,或者您可以做的其他事情是:-

public interface Events{
  public void randomEvent();
}
public class MainActivity{
      public Events getEvents(){
        return null;
      }

      public void randomTrigger(){

            Events events = getEvents();
            if(null != events){
               events.randomEvent();
            }
        }


    }
    }

public class RandomEvent extends MainActivity implements Events{
  @Override
 public void randomEvent() {
    //You stuff
 }
 @Override
 public Events getEvents(){
    return this;
  } 
}

最好的是最后一个。

【讨论】:

    猜你喜欢
    • 2011-08-15
    • 1970-01-01
    • 2012-02-25
    • 2020-07-15
    • 1970-01-01
    • 2023-04-05
    • 2019-08-08
    • 1970-01-01
    • 2013-03-14
    相关资源
    最近更新 更多