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

我遇到了一些麻烦。我遵循了所有在线指南,展示了如何重写子类中的父方法。我已经完成了我被告知要做的所有事情,但我的子函数什么也没做。


我的 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 。


关于为什么我的方法重写不起作用的任何想法?


长风秋雁
浏览 54回答 2
2回答

芜湖不芜

有了继承和重写的概念,您需要在子类中重写 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();    };

ibeautiful

修改父类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 implimentationpublic 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]);            }        });    }}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java