为了账号安全,请及时绑定邮箱和手机立即绑定

子类中重写父方法。子方法不执行任何操作

子类中重写父方法。子方法不执行任何操作

长风秋雁 2024-01-05 10:14:57
我遇到了一些麻烦。我遵循了所有在线指南,展示了如何重写子类中的父方法。我已经完成了我被告知要做的所有事情,但我的子函数什么也没做。我的 MainActivity(父级)课程:package com.example.flashcards;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle;import android.view.View;public class MainActivity extends AppCompatActivity implements View.OnClickListener {    DatabseHelper DB = new DatabseHelper(this);    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        changeText();        changeText2();    };    public void changeText(){}    public void changeText2(){}        String [] columns = new String[] {                DatabseHelper.FLASHCARD_QUESTION,                DatabseHelper.FLASHCARD_ANSWER        };    @Override    public void onClick(View v) {    }}我的孩子班级(TextC)package com.example.flashcards;import android.view.View;import android.widget.Button;import android.widget.TextView;public class TextC extends MainActivity {    @Override    public void changeText() {        super.changeText();        final String[] revertText = {"H2O", "What elements does water consist of?"};        final TextView textChange = findViewById(R.id.flashcard1);        Button change = findViewById(R.id.answer1);        change.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                int random = (int) (Math.random() * revertText.length);                textChange.setText(revertText[random]);            }        });    }我的changeText()函数什么也不做。我没有收到任何错误,所以我不知道我做错了什么。我需要为子类创建一个 onCreate 方法吗?但我正在扩展具有它的 MainActivity 。关于为什么我的方法重写不起作用的任何想法?
查看完整描述

2 回答

?
芜湖不芜

TA贡献1796条经验 获得超7个赞

有了继承和重写的概念,您需要在子类中重写 onCreate 函数。从该重写的方法中,您可以调用 super.onCreate 或者可以从子类中执行 this.chnageText 和 this.changeText2 。


否则,当您调用 onCreate 函数时,它将仅从超类调用changeText 和changeText2。


在你孩子的班级里


@Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);


        this.changeText();

        this.changeText2();

    };


查看完整回答
反对 回复 2024-01-05
?
ibeautiful

TA贡献1993条经验 获得超5个赞

修改父类


package com.example.flashcards;


import androidx.appcompat.app.AppCompatActivity;


import android.os.Bundle;

import android.view.View;


public class MainActivity extends AppCompatActivity implements View.OnClickListener {


    DatabseHelper DB = new DatabseHelper(this);


    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);


        //changeText(); freeze or remove these callings

        //changeText2();

    };

    public void changeText(){}

    public void changeText2(){}


}

并向您的子类添加一些代码


package com.example.flashcards;


import android.view.View;

import android.widget.Button;

import android.widget.TextView;


public class TextC extends MainActivity {


 @Override

 protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    changeText(); 

    changeText2();

};


    @Override

    public void changeText() {

        super.changeText();

        final String[] revertText = {"H2O", "What elements does water consist of?"};


        final TextView textChange = findViewById(R.id.flashcard1);

        Button change = findViewById(R.id.answer1);


        change.setOnClickListener(new View.OnClickListener() {

            @Override

            public void onClick(View v) {

                int random = (int) (Math.random() * revertText.length);

                textChange.setText(revertText[random]);

            }

        });

    }


    public void changeText2() {

        super.changeText2();

        final String[] revertText = {"2,200° F", "How hot does lava get?"};


        final TextView textChange = findViewById(R.id.flashcard2);

        Button change = findViewById(R.id.answer2);


        change.setOnClickListener(new View.OnClickListener() {

            @Override

            public void onClick(View v) {

                int random = (int) (Math.random() * revertText.length);

                textChange.setText(revertText[random]);

            }

        });

    }

}

在上面的方法中没有必要声明changeText(); 和changeText2(); 在家长活动中。为了可重用性,我们可以使用抽象类和方法。


对您的家长活动进行一些更改,如下所示。


public abstract class MainActivity extends AppCompatActivity implements View.OnClickListener {



    @Override

    protected void onCreate(Bundle savedInstanceState) {

      super.onCreate(savedInstanceState);

      setContentView(R.layout.activity_main);

      changeText(); // they dont have default implimentation in parent so it will be invoked from child class where these methods implimented

      changeText2();

   };



public abstract void changeText(); //there is no default implimentation


public abstract void changeText2();


}

在子活动中,您必须实现这些方法。


public class TextC extends MainActivity {


 @Override

 protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    //changeText(); no need to call these methods bcz its already called in parent onCreate()

    //changeText2();

};


    @Override

    public void changeText() {

        super.changeText();

        final String[] revertText = {"H2O", "What elements does water consist of?"};


        final TextView textChange = findViewById(R.id.flashcard1);

        Button change = findViewById(R.id.answer1);


        change.setOnClickListener(new View.OnClickListener() {

            @Override

            public void onClick(View v) {

                int random = (int) (Math.random() * revertText.length);

                textChange.setText(revertText[random]);

            }

        });

    }


    public void changeText2() {

        super.changeText2();

        final String[] revertText = {"2,200° F", "How hot does lava get?"};


        final TextView textChange = findViewById(R.id.flashcard2);

        Button change = findViewById(R.id.answer2);


        change.setOnClickListener(new View.OnClickListener() {

            @Override

            public void onClick(View v) {

                int random = (int) (Math.random() * revertText.length);

                textChange.setText(revertText[random]);

            }

        });

    }

}


查看完整回答
反对 回复 2024-01-05
  • 2 回答
  • 0 关注
  • 49 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信