Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 像这样使用继承是个坏主意吗_Java_Android_Performance_Inheritance - Fatal编程技术网

Java 像这样使用继承是个坏主意吗

Java 像这样使用继承是个坏主意吗,java,android,performance,inheritance,Java,Android,Performance,Inheritance,您好,我在编程方面缺乏经验,在android项目中学习缓慢 问题是我在活动中使用了很多相同的代码。使用继承来共享代码是个坏主意吗 例如: Class Main extends Activity //shared code _ Class a | Class b | - extends Main Class c _| 我的使用示例: public class Global extends Activity { @Override pr

您好,我在编程方面缺乏经验,在android项目中学习缓慢

问题是我在活动中使用了很多相同的代码。使用继承来共享代码是个坏主意吗

例如:

Class Main extends Activity
       //shared code

           _
Class a     |
Class b     | - extends Main
Class c    _|
我的使用示例:

public class Global extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
    setVolumeControlStream(AudioManager.STREAM_MUSIC);
}

public void toastMessage(String tMsg, int tLength) {
    Toast.makeText(getApplicationContext(), tMsg, tLength).show();
}

public void nextActivity(Class<?> classId, ImageButton btnId) {
    AlphaAnimation alpha;
    Vibrator shake = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
    if (btnId!= null) {
        alpha = new AlphaAnimation(0.5F, 1.0F);
        alpha.setDuration(50);
        alpha.setFillAfter(false);
        btnId.startAnimation(alpha);
    }
    shake.vibrate(50);
    Intent goToNextActivity = new Intent(getApplicationContext(), classId);
    startActivity(goToNextActivity);
}

一般来说,仅将继承用于代码重用不是一个好主意。继承使用“是一个”范例。看看你是否更适合用构图。遵循Matthijs的建议,始终发布您的代码。

继承用于表示类属于某个“类别”,例如:

名为“地精”的类扩展了“敌人”类。在“敌人”里面有适用于所有敌人的简单代码(行走、人工智能、攻击等),在“地精”类里面有图形代码,可能是一些对话框、动画或不是所有敌人都共享的东西

在某些情况下,这非常有用,比如控制所有敌人,尽管其中一些实际上是地精或兽人或其他什么。关于代码重用,您可以使用方法来实现,请记住,您的代码必须易于阅读(即使它仅适用于您),因此不要将所有步骤放在一个类中,例如(这将是一个视频游戏示例:P)


即使“移动英雄”和“移动敌人”这样的案例几乎总是一个接一个地应用,将它们组合在一起也不是一个好主意,这样您就可以很容易地知道程序中发生了什么。

信息太少,无法说明。如果是为了学习,那就去尝试吧。如果你遇到问题,你会知道这是一个错误的选择。添加了一个我的用法示例。如果你把
Context
作为一个方法参数,你就可以把它移动到某个实用类中。(或者你可以从你的
ImageButton
)我同意,一般来说,仅将继承用于代码重用并不是一个好主意,我对官方文档中的声明感到惊讶继承的思想很简单,但功能强大:当您想要创建一个新类,并且已经有一个类包含您想要的一些代码时,您可以从现有类派生新类。通过这样做,您可以重用现有类的字段和方法,而无需自己编写(和调试!)。”()误导性,我认为他们应该更好地使用它。我同意,文档在描述继承的本质方面很薄弱:简言之,使用类B的实例来代替(或者如果您愿意,使用“原样”)类A的一个实例。每次我们试图从类继承时,几个简单的问题都会有帮助:1.派生类是否总是可以用来代替基类?如果不是,继承就没有意义2.派生类是否可以使用基类接口或需要其他接口?如果不是,组合更好3.是否存在减少耦合的另一种方法?如果是,则选择最弱的关系(组合)
  nextActivity(a.class, btnA);
  toastMessage("example", Toast.LENGTH_SHORT);
while(game == true)
{
    getInput();

    moveHero();

    moveEnemies();

    applyGravity();

    drawFrame();
}