2013-12-08 81 views
1

你好,我在編程和學習方面沒有經驗,通過爲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); 
} 

類A,B,C可以擴展全球及用途:

nextActivity(a.class, btnA); 
    toastMessage("example", Toast.LENGTH_SHORT); 
+1

要說的信息太少。如果是爲了學習,只要繼續嘗試就可以了。如果遇到問題,你會知道這是一個不好的選擇。 –

+0

添加了我的用法示例。它的作品只是想知道它的性能/可讀性不好。 – Lp2203921

+0

如果您將'Context'作爲方法參數,則可以將該東西移動到某個實用程序類中。 (或者你可以從你的'ImageButton'中獲得) – zapl

回答

3

一般是不是一個好主意僅對代碼重用使用繼承。繼承使用「是」範例。看看你是否更適合使用Composition。按照Matthijs的建議,始終發佈您的代碼。

+0

我同意_一般來說不是一個好主意,只用於代碼複用_我對官方文檔表示驚訝_「繼承的想法很簡單但強大:當你想創建一個新的類,並且已經有一個包含你想要的代碼的類的時候,你可以從現有的類中派生出新的類,這樣可以重用現有的字段和方法而不必自己編寫(和調試!)它們。「_(https://docs.oracle.com/javase/tutorial/java/IandI/subclasses.html)誤導性,我認爲他們應該把它改好。 – SantiBailors

+0

我同意,在描述繼承的本質時,文檔很薄弱:簡而言之,*使用類B'的實例而不是'(或者'因爲它是',如果您願意的話)A *類的實例。 每次我們試圖從一個類繼承時,幾個簡單的問題都會有幫助: 1.可以使用派生類而不是基類嗎?如果不是,繼承沒有意義 2.派生類可以使用基類接口還是需要不同的接口?如果否,組成更好 3.是否存在另一種最小化耦合的方法?如果是的話,更喜歡最弱的關係(構圖) –

0

繼承是常說,一類屬於某個「類」,例如:

一個名爲類「妖精」擴展的類「敵人」。在「敵人」裏面有適用於所有敵人(步行,ai,攻擊等)的簡單代碼,在「地精」類中有像圖形一樣的代碼,也許是一些對話,動畫或不分享給所有敵人的東西。

有些情況下,像控制所有敵人一樣,儘管其中有些實際上是地精或獸人或其他任何敵人,但這種情況非常有用。關於代碼重用,你可以使用方法來做到這一點,請記住,你的代碼必須易於閱讀(即使它只是爲你),所以不要把所有的步驟放在一個類中,例如(這將是再一個視頻遊戲例如:P)

while(game == true) 
{ 
    getInput(); 

    moveHero(); 

    moveEnemies(); 

    applyGravity(); 

    drawFrame(); 
} 

即使有像「moveHero」和「moveEnemies」將要幾乎都是應用了一個又一個的情況下,這不是一個好主意,他們組合在一起,所以你可以很容易地知道你的程序中發生了什麼。

相關問題