728x90
자식이 부모를 선택해 물려받는다.
상속을 사용하면 중복된 코드가 줄어든다.
package inheritance;
public class Cellphone {
public String model;
public String color;
public void powerOn(){
System.out.println("전원을켭니다");
}
void powerOff(){
System.out.println("전원을끕니다");
}
public void bell() {
System.out.println("벨이 울립니다");
}
public void sendVoice(String message) {
System.out.println("자기:" + message);
}
public void receiveVoice(String message){
System.out.println("상대방:" +message);
}
public void hangUp() {
System.out.println("전화를 끊습니다.");
}
}
package inheritance;
public class DmbCellPhone extends Cellphone{
public int channel;
public DmbCellPhone(String model, String color, int channel){
this.model = model;
this.color = color;
this.channel = channel;
}
public void turnOnDmb() {
System.out.println("채널" + channel +"번 DMB방송 수신을 시작합니다.");
}
public void changeChannelDmb(int channel) {
this.channel = channel;
System.out.println("채널" + channel + "번으로 바꿉니다.");
}
public void turnOffDmb(){
System.out.println("DMB 방송 수신을 멈춥니다");
}
}
extend를 쓰면 확장이라는 개념으로 부모클래스에서 재산을 물려받는다
import inheritance.DmbCellPhone;
public class mmain {
public static void main(String[] arg){
inheritanceExample();
}
private static void inheritanceExample() {
DmbCellPhone dmbCellPhone = new DmbCellPhone("자바폰", "검정", 10);
System.out.println("모델" + dmbCellPhone.model);
System.out.println("색상" + dmbCellPhone.color);
System.out.println("채널" + dmbCellPhone.channel);
dmbCellPhone.powerOn();
dmbCellPhone.bell();
dmbCellPhone.sendVoice("여보세요");
dmbCellPhone.receiveVoice("안녕하세요! 저는 홍길동인데요");
dmbCellPhone.sendVoice("아~예 반갑습니다");
dmbCellPhone.hangUp();
dmbCellPhone.turnOnDmb();
dmbCellPhone.changeChannelDmb(12);
dmbCellPhone.turnOffDmb();
}
}
extends
- 사실 extends가 상속의 대표적인 형태이다.
- 모든 선언/정의를 부모가 하며, 자식은 오버라이딩 할 필요 없이 부모의 메소드/변수를 그대로 사용할 수 있다.
- 물론, 필요에 따라 오버라이딩 해도 상관 없다.
implements
- 부모는 선언만 하며, 반드시 자식이 정의를 오버라이딩해서 사용한다.
포함관계
포함(composit)이란?
- 클래스의 멤버로 참조변수를 선언하는 것
- 작은단위의 클래스르 만들고 이들을 조합하여 클래스를 만든다.
꼭 필요할때만 상속 사용, 보통 포함을 많이 사용한다.
Super
- 객체 자신을 가르키는 참조변수 인스턴스 메소드(생성자)내에서만 존재.
- 조상의 멤버를 자신의 멤버와 구별할때 사용
class Ex7_2 {
public static void main(String args[]) {
Child c = new Child();
c.method();
}
}
class Parent {int x = 10;}
class Child extends Parent{
int x = 20;//this.x
void method(){
System.out.println("x=" +x);
System.out.println("this.x="+this.x);
System.out.println("super.x"+super.x);
}
}
상속 예제1 - 슬라임생성
main
import java.util.*;
import slimeLand.*;
// import inheritance.*;
public class main {
public static void main(String[] arg){
// GameStart();
// inheritanceExample();
//끝!
SlimeGo();
}
private static void SlimeGo(){
RedSlime redslime = new RedSlime(20, 30, "red", "예쁜이");
redslime.initSlime();
redslime.getColor();
}
}
RedSlime
package slimeLand;
//extends를 통해 NormalSlime의 데이터를 물려받았습니다 (상속)
public class RedSlime extends NormalSlime{
public String color;
public RedSlime(int hp, int mp, String color, String name){
this.hp = hp;
this.mp = mp;
this.color = color;
this.name = name;
}
public void getColor() {
System.out.println("이 슬라임의 색상은 "+this.color+"입니다");
}
}
NormalSlime
package slimeLand;
public class NormalSlime {
//우리의 노멀슬라임은 1v1의 갸냘픈 슬라임입니다
//필드값
public int hp;
public int mp;
public String name;
public int exp;
//red슬라임만 생성할 것이므로 생성자 삭제
//hp, mp를 매개변수로 받아서 Normalslime을 만듭니다.
// NormalSlime(int hp, int mp){
// this.hp = hp;
// this.mp = mp;
// exp = 20;
// }
public void initSlime() {
System.out.println(this.name+"태어났다");
}
}
상속 예제2 - 포션생성
mmain
import slimeLand.RedPotion;
public class mmain {
public static void main(String[] arg){
usePotion();
}
private static void usePotion(){
RedPotion redpotion = new RedPotion(30, 1);
RedPotion redPotion_x3 = new RedPotion(30, 3);
redpotion.usePotionText();
int effectHP = redpotion.useItem(20); //구분짓기
int effectHP_x3 = redPotion_x3.useItem(40); //구분짓기
System.out.println("용사는 포션을 사용하여 HP" +effectHP+ "회복했습니다");
System.out.println("용사는 포션을 사용하여 HP" +effectHP_x3+ "회복했습니다");
}
}
Potion
package slimeLand;
public class Potion {
public int effectHP;
public void usePotionText(){
System.out.println("포션을 사용하셨습니다");
}
}
RedPotion
package slimeLand;
public class RedPotion extends Potion {
public int effect;
public RedPotion(int hp, int effect){
this.effectHP = hp;
this.effect = effect;
}
public int useItem(int invenUseNumber){
int result = effectHP * effect;
return result;
}
}
상속 예제3 - 샌드위치
main
import java.util.ArrayList;
import WeekSandwich.*;
public class main {
public static void main(String[] arg){
MonSandwich Monsand = new MonSandwich("블루베리베이컨샌드위치", "월" ,"빵", "버터", "블루베리", "베이컨");
TueSandwich Tuesand = new TueSandwich("상추베이컨샌드위치", "화", "빵","버터","상추","베이컨");
WedSandwich Wedsand = new WedSandwich("단호박샌드위치", "수", "빵", "버터", "단호박");
TurSandwich Tursand = new TurSandwich("에그샌드위치", "목", "빵", "버터", "계란", "샐러드");
FriSandwich Frisand = new FriSandwich("아보카도에그샌드위치", "금", "빵", "버터", "아보카도","계란");
ArrayList<String> mondaySand = new ArrayList<String>();
ArrayList<String> tuesdaySand = new ArrayList<String>();
ArrayList<String> wedsdaySand = new ArrayList<String>();
ArrayList<String> tursdaySand = new ArrayList<String>();
ArrayList<String> fridaySand = new ArrayList<String>();
mondaySand.add(Monsand.bread+","+Monsand.butter+","+Monsand.blueberry+","+Monsand.bacon);
tuesdaySand.add(Tuesand.bread+","+Tuesand.butter+","+Tuesand.lecttue+","+Tuesand.bacon);
wedsdaySand.add(Wedsand.bread+","+Wedsand.butter+","+Wedsand.sweetpumpkin);
tursdaySand.add(Tursand.bread+","+Tursand.butter+","+Tursand.egg+","+Tursand.salad);
fridaySand.add(Frisand.bread+","+Frisand.butter+","+Frisand.abocado+","+Frisand.egg);
Monsand.monsand();
System.out.println(mondaySand);
Tuesand.tuesand();
System.out.println(tuesdaySand);
Wedsand.wedsand();
System.out.println(wedsdaySand);
Tursand.tursand();
System.out.println(tursdaySand);
Frisand.frisand();
System.out.println(fridaySand);
}
}
재료
package WeekSandwich;
public class ingredients {
public String name;
public String week;
public String bread;
public String butter;
public String blueberry;
public String lecttue;
public String bacon;
public String sweetpumpkin;
public String egg;
public String salad;
public String abocado;
}
월요일
package WeekSandwich;
public class MonSandwich extends ingredients{
//void가 있으면 메소드로 생각
//void 지워주기
//생성자는 이름 통일
public MonSandwich(String name, String week, String bread, String butter, String blueberry, String bacon){
this.name = name;
this.week = week;
this.bread = bread;
this.butter = butter;
this.blueberry = blueberry;
this.bacon = bacon;
}
public void monsand(){
System.out.println("뭐먹을까? :"+this.name);
System.out.println("언제먹을까? :"+this.week);
}
}
화요일
package WeekSandwich;
public class TueSandwich extends ingredients{
public TueSandwich(String name, String week, String bread, String butter, String lecttue, String bacon){
this.name = name;
this.week = week;
this.bread = bread;
this.butter = butter;
this.lecttue = lecttue;
this.bacon = bacon;
}
public void tuesand(){
System.out.println("뭐먹을까? :"+this.name);
System.out.println("언제먹을까? :"+this.week);
}
}
수요일
package WeekSandwich;
public class WedSandwich extends ingredients{
public WedSandwich(String name, String week, String bread, String butter, String sweetpumpkin){
this.name = name;
this.week = week;
this.bread = bread;
this.butter = butter;
this.sweetpumpkin = sweetpumpkin;
}
public void wedsand(){
System.out.println("뭐먹을까? :"+this.name);
System.out.println("언제먹을까? :"+this.week);
}
}
목요일
package WeekSandwich;
public class TurSandwich extends ingredients{
public TurSandwich(String name, String week, String bread, String butter, String egg, String salad){
this.name = name;
this.week = week;
this.bread = bread;
this.butter = butter;
this.egg = egg;
this.salad = salad;
}
public void tursand(){
System.out.println("뭐먹을까? :"+this.name);
System.out.println("언제먹을까? :"+this.week);
}
}
금요일
package WeekSandwich;
public class FriSandwich extends ingredients{
public FriSandwich(String name, String week, String bread, String butter, String abocado, String egg){
this.name = name;
this.week = week;
this.bread = bread;
this.butter = butter;
this.abocado = abocado;
this.egg = egg;
}
public void frisand(){
System.out.println("뭐먹을까? :"+this.name);
System.out.println("언제먹을까? :"+this.week);
}
}
더보기
슈퍼클래스 맛보기예제
부모클래스를 다양하게 만드는 것
이미지 출처 : 이것이자바다
728x90
'STUDY > JAVA' 카테고리의 다른 글
[JAVA] 메소드 재정의, 상속 등을 이용해 게임 만들기 (0) | 2022.06.27 |
---|---|
[JAVA] 22-06-27 메소드 재정의 (Override) ☑ (0) | 2022.06.27 |
[JAVA] 22-06-23 어노테이션(Annotation) ☑ (0) | 2022.06.23 |
[JAVA] 슬라임 게임 만들기 (0) | 2022.06.21 |
[JAVA] 22-06-28 for문 이용해서 별 찍기 ☑ (0) | 2022.06.21 |