예제
class Person{
//Field
private String name;
private int age;
private int height;
private int weight;
//Constructor
Person(String name, int age, int height, int weight){
this.name = name;
this.age = age;
this.height = height;
this.weight = weight;
}
//Method
public String getName() {return name;}
public void setName(String name) {
this.name = name;
}
public int getAge() {return age;}
public void setAge(int age) {
this.age = age;
}
public int getHeight() {return height;}
public void setHeight(int height) {
this.height = height;
}
public int getWeight() {return weight;}
public void setWeight(int weight) {
this.weight = weight;
}
public void move() {
System.out.println(name + " 이동 중");
}
}
class Villain extends Person{
//Field
private int weapon;
private int power;
//Constructor
Villain(String name, int age, int height, int weight, int weapon, int power) {
super(name, age, height, weight);
this.weapon = weapon;
this.power = power;
}
//Method
public int getWeapon() {return weapon;}
public void setWeapon(int weapon) {
this.weapon = weapon;
}
public int getPower() {return power;}
public void setPower(int power) {
this.power = power;
}
//printPerson()
public void printPerson() {
System.out.println("빌런 이름 : " + getName());
System.out.println("빌런 나이 : " + getAge());
System.out.println("빌런 키 : " + getHeight());
System.out.println("빌런 몸무게 : " + getWeight());
System.out.println("빌런 무기 : " + getWeaponName(getWeapon()));
System.out.println("빌런 파워 : " + getPower());
System.out.println();
}
// geWeaponName()
public String getWeaponName(int a) {
String weapon;
switch(a) {
case 1:
weapon = "대검";
break;
case 2:
weapon = "폭탄";
break;
default :
weapon = "무기없음";
}
return weapon;
}
}
public class oop_InheritanceSample4 {
public static void main(String[] args) {
// [1] : 객체생성
Villain villain1 = new Villain("타노스", 300, 200, 130, 1, 100);
villain1.printPerson();
villain1.move();
System.out.println("----------------");
// [2] : 객체생성
Villain villain2 = new Villain("고블린", 50, 180, 80, 2, 80);
villain2.printPerson();
villain2.move();
}
}
빌런 이름 : 타노스
빌런 나이 : 300
빌런 키 : 200
빌런 몸무게 : 130
빌런 무기 : 대검
빌런 파워 : 100
타노스 이동 중
----------------
빌런 이름 : 고블린
빌런 나이 : 50
빌런 키 : 180
빌런 몸무게 : 80
빌런 무기 : 폭탄
빌런 파워 : 80
고블린 이동 중
이 코드는 상속, 캡슐화 객체지향 프로그래밍의 원칙을 보여주는 예제이다.
Person class는 일반적인 특성을 나타내는 필드(이름, 나이, 키, 몸무게)와 메소드(이동하기)를 가지고 있다. 이 때 각 필드에 접근하거나 변경하는 것을 제어하기 위해 getter와 setter메서드를 사용하였다. 이는 캡슐화의 개념을 구현한 것으로, 객체의 상태를 직접적으로 변경하지 못하게 하여 데이터의 안정성을 보장한다.
그리고 이 Person class는 Villain class에 상속되어, Villain은 Person의 모든 특성을 상속받아 사용할 수 있다. 이처럼 하나의 클래스가 다른 클래스의 특성을 물려받는 것을 상속(inheritance)이라고 한다. 이를 통해 코드의 중복을 줄이고, 소프트웨어의 복잡성을 관리하는데 도움이 된다.
또한, Villain class는 Person Class가 가지지 않는 고유한 특성인 "무기", "파워" 필드를 추가하였고, 이에 대한 getter, setter 메서드를 추가하였다. 이처럼 상속받은 클래스에서 새로운 필드나 메서드를 추가하는 것을 확장(Extension)이라고 한다.
이와 같이, 상속과 캡슐화는 자바와 같은 객체지향 프로그래밍에서 매우 중요한 개념이다.
'Java > JAVA 100 문제 풀이' 카테고리의 다른 글
자바 part.4 문제풀이 - 추상 클래스(Abstract Class)개념, 필요 (0) | 2023.07.26 |
---|---|
자바 part.3 문제풀이 - 객체배열의 이해와 다형성 활용 (0) | 2023.07.25 |
자바 part.3 문제풀이 - Getter와 Setter를 이용한 클래스 캡슐화 (0) | 2023.07.25 |
자바 part.3 문제풀이 - 상속과 메서드 오버라이딩 이해하기 (0) | 2023.07.25 |
자바 part.3 문제풀이 - 상속 : Person과 Hero예제를 통한 이해 (0) | 2023.07.25 |