반응형
상속 (Inheritance)
- 기존 클래스를 확장하여 새로운 클래스를 이끌어낸다.(추상적인 이론)
- 코드를 '재사용' 한다는 것이 키포인트⭐
- 아래와 같이 각 클래스의 중복되는 속성들을 하나의 클래스로 정의하고 그것을 부모 클래스로 하여 나머지 클래스들은 상속을 받아서 사용하면 중복되는 코드들을 줄일 수 있다.

아래와 같이 상속을 받지 않고 코드를 짜면 보기에는 편하지만 각각의 클래스에 중복된 코드들이 많이 있다.

위 코드를 아래와 같이 중복된 속성은 Person Class에 정의 하고 그것을 상속받아서 사용한다면 중복된 코드들을 모두 삭제할 수 있다. (but, 관계에 복잡도는 발생한다. 부모와 자식간의 관계를 이해하여야 한다.)

student class에 age와 name은 없지만 Person class를 상속받았기때문에 해당 변수들도 사용가능하다.

➰Quiz - 상속을 사용하여 문제풀기
🔆 main클래스
package quiz03;
public class MainClass {
public static void main(String[] args) {
//Dmb폰 객체 생성
DmbPhone dp = new DmbPhone("햅틱", "메탈그레이", 10);
//Phone클래스에서 상속받은 멤버 변수에 접근
System.out.println("모델: " + dp.model);
System.out.println("색상: " + dp.color);
//DmbPhone에서 선언한 멤버 변수에 접근
System.out.println("채널: " + dp.channel);
//Phone에서 상속받은 메서드 호출
dp.powerOn();
dp.ring();
dp.sendVoice("여보세요??");
dp.recieveVoice("안녕하세요? XX보험입니다.");
dp.hangUp();
//DmbPhone에서 선언한 메서드 호출
dp.turnOnDmb(); //기능: TV를 켭니다 출력
dp.changeChannel(7); //기능: channel변수를 전달받은 변수로 변경후 출력
dp.turnOffDmb(); //기능: TV를 끕니다 출력
dp.powerOff();
}
}
🔆Phone(부모 클래스)
package quiz03;
public class Phone { //부모클래스
String model;
String color;
int channel;
void powerOn() {
System.out.println("전원을 켭니다.");
}
void powerOff() {
System.out.println("전원을 끕니다.");
}
void ring() {
System.out.println("벨이 울립니다.");
}
void sendVoice(String message) {
System.out.println("나: " + message);
}
void recieveVoice(String message) {
System.out.println("상대방: " + message);
}
void hangUp() {
System.out.println("전화를 끊습니다.");
}
}
🔆DmbPhone(자식 클래스)
package quiz03;
public class DmbPhone extends Phone{
//DmbPhone은 Phone클래스를 상속 받습니다.
//channel 변수를 생성하고, color, model, channel을 초기화 하는 생성자를 작성하세요.
//메인메서드가 정상적으로 실행되도록 메서드를 추가하세요.
DmbPhone(String pModel, String pColor, int pChannel){
model = pModel;
color = pColor;
channel = pChannel;
}
void turnOnDmb() {
System.out.println("기능 : TV를 켭니다.");
}
int changeChannel(int pChannel) {
channel = pChannel;
System.out.println("채널이 "+channel+"번으로 변경되었습니다");
return channel;
}
void turnOffDmb() {
System.out.println("기능 : TV를 끕니다.");
}
}
🔆결과값
모델: 햅틱
색상: 메탈그레이
채널: 10
전원을 켭니다.
벨이 울립니다.
나: 여보세요??
상대방: 안녕하세요? XX보험입니다.
전화를 끊습니다.
기능 : TV를 켭니다.
채널이 7번으로 변경되었습니다
기능 : TV를 끕니다.
전원을 끕니다.
➰Quiz - 상속을 사용하여 문제풀기2
🔆main클래스
package quiz04;
public class MainClass {
public static void main(String[] args) {
Wizard p1 = new Wizard("마법사법사");
p1.info();
p1.iceArrow();
Warrior p2 = new Warrior("검사");
p2.info();
p2.bash();
p2.bash();
p2.bash();
p2.bash();
p2.bash();
p2.bash();
p2.bash();
}
}
🔆 Player (부모클래스)
package quiz04;
public class Player {
String name;
int hp;
int mp;
void info() {
System.out.println("====현재 상태===");
System.out.println("캐릭명:" + name);
System.out.println("hp:" + hp);
System.out.println("mp:" + mp);
}
}
🔆 Warrior (자식클래스)
package quiz04;
public class Warrior extends Player{
//Player클래스로 상속관계를 만들어 주세요
//전사는 생성될 때 ★이름만 매개변수로 받고, hp = 100, mp = 50이 됩니다.
//전사는 강력한 bash()를 가지고 있습니다
//bash()는 호출될떄마다 mp를 -10씩 감소시킵니다
Warrior(String pName){
name = pName;
hp = 100;
mp = 50;
}
void bash() {
System.out.println("** bash 기술 사용으로 mp -10되었습니다 **");
mp -= 10;
info();
}
}
🔆 Wizard (자식클래스)
package quiz04;
public class Wizard extends Player{
//Player클래스로 상속관계를 만들어 주세요
//마법사는 생성될 때 ★이름만 매개변수로 받고, hp = 50, mp = 100이 됩니다.
//마법사는 강력한 iceArrow()를 가지고 있습니다
//iceArrow()는 호출될떄마다 mp를 -20씩 감소시킵니다
Wizard(String pName){
name = pName;
hp = 50;
mp = 100;
}
void iceArrow() {
System.out.println("** iceArrow 기술 사용으로 mp -20되었습니다 **");
mp -= 20;
info();
}
}
🔆 결과값
====현재 상태===
캐릭명:마법사법사
hp:50
mp:100
** iceArrow 기술 사용으로 mp -20되었습니다 **
====현재 상태===
캐릭명:마법사법사
hp:50
mp:80
====현재 상태===
캐릭명:검사
hp:100
mp:50
** bash 기술 사용으로 mp -10되었습니다 **
====현재 상태===
캐릭명:검사
hp:100
mp:40
** bash 기술 사용으로 mp -10되었습니다 **
====현재 상태===
캐릭명:검사
hp:100
mp:30
** bash 기술 사용으로 mp -10되었습니다 **
====현재 상태===
캐릭명:검사
hp:100
mp:20
** bash 기술 사용으로 mp -10되었습니다 **
====현재 상태===
캐릭명:검사
hp:100
mp:10
** bash 기술 사용으로 mp -10되었습니다 **
====현재 상태===
캐릭명:검사
hp:100
mp:0
** bash 기술 사용으로 mp -10되었습니다 **
====현재 상태===
캐릭명:검사
hp:100
mp:-10
** bash 기술 사용으로 mp -10되었습니다 **
====현재 상태===
캐릭명:검사
hp:100
mp:-20반응형
'국비지원 > JAVA' 카테고리의 다른 글
| [JAVA] 13-1. method 재정의 (Overriding) (0) | 2022.10.07 |
|---|---|
| [JAVA] 12-3. Quiz 은행 입/출금 서비스 (0) | 2022.10.06 |
| [JAVA] 12-1. Garbage Collecting와 Package / 기본타입과 참조타입 (0) | 2022.10.06 |
| [JAVA] 11-3. 생성자(Constructor) (0) | 2022.10.05 |
| [JAVA] 11-2. 객체와 클래스 (0) | 2022.10.05 |