Android側で実験したJAVAクラスリファクタリングとインスタンスを持ってアクティビティ遷移

#背景
この文章は次の二つの仕様が欲しい人にとっては参考になれるかもしれません。
#####1.オブジェクトの型のリファクタリング:サブクラス->親クラス->サブクラス変換で、インスタンスの中身は実は縮めたりなくなったりしていない。(図1)
#####2.アクティビティ遷移する時に渡したい配列があれば、配列に納めたオブジェクトのクラスをSerializableインタフェースを実装すれば、普通のputExtra(String name, Serializable value)を使って、次のアクティビティへ渡せる。(図2)

![スクリーンショット 2018-02-06 17.10.16.png](https://qiita-image-store.s3.amazonaws.com/0/191439/a7d0413d-a984-1055-9f4d-85e2a3db5a77.png)
図1

![スクリーンショット 2018-02-06 17.19.59.png](https://qiita-image-store.s3.amazonaws.com/0/191439/183453ca-9229-3ccf-ddb2-dfd9b0884ed7.png)
図2


#ソースコード
#####1.Contribution.java

```

public class Contribution implements Serializable{
    String category;
    Date time;
    String title;
    String content;

    public Contribution(){
        category = "general";
        time = new Date();
        title = "general";
    }


    public String getCategory() {
        return category;
    }

    public String getTime() {
        return time.toString();
    }

    public void setTime(Date time) {
        this.time = time;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }


    public String toString() {
        return "Contribution-->Title:   " + getTitle() + "\nCategory:   " + getCategory() +"\nContent:n" + getContent() + "\nDate:   " + getTime();
    }



}

```

#####2.MyContribution.java

```
public class MyContribution extends Contribution{
    public String subTitle;

    public MyContribution(String _title,String _content,String _subTitle){
        title = _title;
        content = _content;
        subTitle = _subTitle;
        category = "training";
    }

    public String getSubTitle() {
        return subTitle;
    }

    public String toString(){
        return "MyContribution-->Title:   " + getTitle() + "\nsubtitle:   " + getSubTitle() + "\nCategory:   " + getCategory() +"\nContent:\n" + getContent() + "\nDate:   " + getTime();
    }
}
```


#####3.TypeConvertActivity.java

```
public class TypeConvertActivity extends AppCompatActivity {
    Contribution contribution = null;
    ArrayList<MyContribution> myContributionArrayList;
    ArrayList<Contribution> contributionArrayList;
    ArrayList<MyContribution> myRecoveryContributionArrayList;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_type_convert);

        MyContribution myContribution = new MyContribution("JAVA基礎","開発のコツについて","JAVA基礎開発編");
        contribution = (Contribution) myContribution;

        myContributionArrayList = new ArrayList<MyContribution>();
        contributionArrayList = new ArrayList<Contribution>();
        myRecoveryContributionArrayList = new ArrayList<MyContribution>();

        myContributionArrayList.add(new MyContribution("Java Study1","new String('good day')","String Type"));
        myContributionArrayList.add(new MyContribution("Java Study2","new Boolean(true)","Boolean Type"));
        myContributionArrayList.add(new MyContribution("Java Study3","new Integer(17)","Integer Type"));
        myContributionArrayList.add(new MyContribution("Java Study4","new ArrayList<>()","ArrayList Type"));
        myContributionArrayList.add(new MyContribution("Java Study5","new Double(3.1415926)","Double Type"));


        for(MyContribution m:myContributionArrayList){
            Log.d("myContribution",m.toString());
            contributionArrayList.add((Contribution) m);
        }

        for(Contribution m:contributionArrayList){
            Log.d("Contribution",m.toString());
            myRecoveryContributionArrayList.add((MyContribution) m);
        }

        for(MyContribution m:myRecoveryContributionArrayList){
            Log.d("Recovery Contribution",m.toString());
        }


        Button bringContributionToNextPage = (Button) findViewById(R.id.bringContributionToNextPage);
        bringContributionToNextPage.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                goToActivity();
            }
        });

    }

    private void goToActivity(){
        Intent intent = new Intent(getApplication(),ReceiveTypeConvertActivity.class);
        intent.putExtra("contribution", contribution);
        intent.putExtra("contributionArrayList",contributionArrayList);
        startActivity(intent);
    }


}

```

#####4.activity_type_convert.xml

```
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.syoui.imagetab.java_knowledge.TypeConvertActivity">

    <Button
        android:id="@+id/bringContributionToNextPage"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="BringContributionToNextPage"/>
</android.support.constraint.ConstraintLayout>

```

#####5.ReceiveTypeConvertActivity

```

public class ReceiveTypeConvertActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_receive_type_convert);
        Intent intent = getIntent();
        Serializable contributionSerial = intent.getSerializableExtra("contribution");
        if(contributionSerial != null){
            Contribution contribution = (Contribution) contributionSerial;
            Log.d("Receive:contribution",contribution.toString());
        }

        Serializable contributionArrayListSerial = intent.getSerializableExtra("contributionArrayList");
        if(contributionArrayListSerial != null){
            ArrayList<Contribution> contributionArrayList = ( ArrayList<Contribution>)contributionArrayListSerial;
            for(Contribution m:contributionArrayList){
                Log.d("contributionArrayList",m.toString());
            }
        }


    }
}

```

#####6.activity_receive_type_convert.xml

```
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.syoui.imagetab.java_knowledge.ReceiveTypeConvertActivity">

</android.support.constraint.ConstraintLayout>

```

#3.結果
  ログの出力を確認したら、インスタンスをContributeクラス(subtitle)を持っていないクラスにcastしても、toString()メソードはまたMyContributionクラスのtoString()メソードを実行されている。MyContributionのインスタンスを一回親クラスContributionにcast下が、中身は変わりません。
![スクリーンショット 2018-02-06 17.32.55.png](https://qiita-image-store.s3.amazonaws.com/0/191439/aa3f2910-112c-a417-69be-0f2e3989aa4c.png)
図3
  またcontributionArrayListを受け取る側でも問題なくcontributionArrayListをまるごとに受け取りました。
![スクリーンショット 2018-02-06 17.46.34.png](https://qiita-image-store.s3.amazonaws.com/0/191439/56510fdd-f432-5a39-647d-ae33f754e5a8.png)
図4

  大したことではないですが、仕事で出会える問題です。