본문 바로가기

아옳옳의 코딩공부/아옳옳 자바코딩공부

2021-02-24 자바공부 (상속4 상속을 사용한 안드로이드 작업)

반응형

오늘은 어제배운 상속을 다시한번 복습을 하기위한 공부를 했다~ 

 

안드로이드 스튜디오를 활용하여 간단한 프로그램을 만들었다 

파일목록

일단보이는것처럼 클래스를 만들어 주었다 . (코드공부이기때문에 xml 코드는 생략할예정 ) 

각 코드에 주석을 보고 이해 하면 된다 

 

메인엑티비티 클래스 

package com.example.javachap14;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.RadioButton;

public class MainActivity extends AppCompatActivity {

    EditText editname;
    ImageView imageView;
    Person person;

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


        editname = findViewById(R.id.edtName);
        imageView = findViewById(R.id.imageView);
        Button btn_Create = findViewById(R.id.btnmake);
        Button btn_Walk = findViewById(R.id.btnwalk);
        Button btn_run = findViewById(R.id.btnrun);
        Button btn_Cry = findViewById(R.id.btncry);

        btn_Create.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //버튼이 눌렸을때 라디오버튼의 선택사항에따라 객체를 생성한다 
                RadioButton radioButton = findViewById(R.id.rdo_person);
                boolean person_Checked = radioButton.isChecked();
                if (person_Checked) {
                    //Person 객체를 생성하는 메소드 호출 아래에 있다 
                    createPerson(editname.getText().toString());
                } else {
                    createBaby(editname.getText().toString());
                }
            }
        });

        btn_Walk.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (person != null) {
                    if (person instanceof Baby) {
                        person.walk(5);
                    } else {
                        person.walk(10);
                    }
                }
            }
        });
        btn_run.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (person != null) {
                    if (person instanceof Baby) {
                        person.run(10);
                    } else {
                        person.run(20);
                    }
                }
            }
        });
        btn_Cry.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (person != null) {
                    person.cry();
                }
            }
        });
    }


    // 각 객체를 만드는 메소드 
    void createPerson(String name) {
        person = new Person(name, this);
        imageView.setImageResource(R.drawable.person);
    }

    //베이비를 만들어서 펄슨에 넣어줬다
    void createBaby(String name) {
        person = new Baby(name, this);
        imageView.setImageResource(R.drawable.baby);
    }

}

부모클래스 

package com.example.javachap14;

import android.widget.Toast;
//Person 부모 클래스 여기이 속성을 자식이 받아서 사용
public class Person {

    String name;
    MainActivity activity; // 이 클래스에서 토스트 메시지를 사용할거기 때문에 화면을 관리는 액티비티도 받아온다

    // Person 생성자
    public Person(String name, MainActivity activity) {
        this.name = name;
        this.activity = activity;
    }
    //걸어간다 라는 버튼을 눌럿을때 호출될 메소드
    void walk(int speed){
        Toast.makeText(activity.getApplicationContext(), name+"이(가) " + speed +"km 속도로 걸어갑니다", Toast.LENGTH_LONG ).show();
        //버튼이 눌렸을때 보여줄 이미지를 바꿔준다
        activity.imageView.setImageResource(R.drawable.person_walk);
    }
    //뛴다 라는 버튼을 눌럿을때 호출될 메소드
    void run(int speed){
        Toast.makeText(activity.getApplicationContext(), name+"이(가) " + speed +"km 속도로 뛰어갑니다", Toast.LENGTH_LONG ).show();
        activity.imageView.setImageResource(R.drawable.person_run);
    }
    //이건 자식Baby에서만 사용할것이지만 오버라이딩 하기위하여 만들어 놈
    void cry(){
        Toast.makeText(activity.getApplicationContext(), name+"이(가) 안울어!!! " , Toast.LENGTH_LONG).show();
        //여기에서 아이디값은 정수값이라 0을 넣게 되면 아무것도 없는거이 된다
        activity.imageView.setImageResource(0);
    }
}

자식클래스

package com.example.javachap14;

import android.widget.Toast;

import com.example.javachap14.MainActivity;
import com.example.javachap14.R;
// Person클래스를 상속받은 Baby 자식클래스
public class Baby extends Person{

    public Baby(String name, MainActivity activity) {
        super(name, activity);
    }
    //걸어간다 라는 버튼을 눌럿을때 호출될 메소드
    @Override
    void walk(int speed) {
        Toast.makeText(activity.getApplicationContext(), name+"이(가) " + speed +"km 속도로 걸어갑니다", Toast.LENGTH_LONG ).show();
        //버튼이 눌렸을때 보여줄 이미지를 바꿔준다
        activity.imageView.setImageResource(R.drawable.baby_walk);
    }
    //뛴다 라는 버튼을 눌럿을때 호출될 메소드
    @Override
    void run(int speed) {
        Toast.makeText(activity.getApplicationContext(), name+"이(가) " + speed +"km 속도로 뛰어갑니다", Toast.LENGTH_LONG ).show();
        activity.imageView.setImageResource(R.drawable.baby);
    }
    //운다 라는 버튼을 눌럿을때 호출될 메소드
    @Override
    void cry() {
        Toast.makeText(activity.getApplicationContext(), name+"이(가) 앵앵앵앵앵응앵앙엉앙엥 울어용~~ 우쭈쭈쭈", Toast.LENGTH_LONG ).show();
        activity.imageView.setImageResource(R.drawable.baby_cry);
    }
}

어플 실행 첫 화면
아기를 생성하고 버튼 눌렸을떄 

사람만들기를 눌러서 그 이름을 가진 사람을 만들어 주고 걷기 뛰기 울기 등 각각의 버튼을 눌렀을때 사진이 변경 되면서 토스트 메시지가 나오게 만들어 보았다 

 

코드내부에 상속에서 배웠던 오버라이드 , instansof등 다 이용해서 복습한다 생각하고 공부했다 

 

객체지향에서 상속이랑 개념은 정말중요하다고 해서 오늘 수업에서 복습을 해서 뭐 좋았다~

 

오늘도 고생했어옳~~~~~~~~~

반응형