전체 방문자
오늘
어제
21종
종이의 코딩 공부방
21종
  • 분류 전체보기 (171)
    • JAVA (64)
    • Springboot (46)
      • 블로그만들기 (45)
    • Database (60)
      • Oracle (60)
    • 프로젝트 3 (CELOVER) (0)
    • 개발서버 구축 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

인기 글

최근 글

최근 댓글

hELLO · Designed By 정상우.
21종

종이의 코딩 공부방

JAVA

[자바/JAVA] 프로그래밍 - 다형성 (Polymorphism) - 추상(abstract) - Interface

2023. 6. 13. 21:13

추상클래스(abstract Class) : 일반필드 + 일반메소드 [+ 추상메소드]
인터페이스(interface) : only 상수필드 + 추상메소드


인터페이스 사용 전

Person Class

package com.kh.chap02_abstractAndInterface.part02_basic.model.vo;

public abstract class Person {

	private String name;
	private double weight;
	private int health;
	
	public Person() {
		
	}
	
	public Person(String name, double weight, int health) {
		this.name = name;
		this.weight = weight;
		this.health = health;
	}
	
	public String getName() {
		return name;
	}
	
	public void setName(String name) {
		this.name = name;
	}
	
	public double getWeight() {
		return weight;
	}
	
	public void setWeight(double weight) {
		this.weight = weight;
	}
	
	public int getHealth() {
		return health;
	}
	
	public void setHealth(int health) {
		this.health = health;
	}
	
	public String toString() {
		return "name : " + name + ", weight : " + weight + ", health : " + health;
	}
	
	public abstract void eat();
	public abstract void sleep();
}

Mother Class

package com.kh.chap02_abstractAndInterface.part02_basic.model.vo;

public class Mother extends Person implements Basic {

	private String babyBirth; // 아이의 탄생	출산|입양|없음
	
	public Mother() {
		
	}
	
	public Mother(String name, double weight, int health, String babyBirth) {
		super(name, weight, health);
		this.babyBirth = babyBirth;
	}
	
	public String getBabyBirth() {
		return babyBirth;
	}
	
	public void setBabyBirth(String babyBirth) {
		this.babyBirth = babyBirth;
	}

	@Override
	public String toString() {
		return super.toString() + ", babyBirth : " + babyBirth;
	}
	
	@Override
	public void eat() {
		// 밥먹으면 몸무게 10증가
		super.setWeight(super.getWeight() + 10);
		
		// 건강도 10 감소
		super.setHealth(super.getHealth() - 10);
	}

	@Override
	public void sleep() {
		// 잠자면 건강도 20 증가
		super.setHealth(super.getHealth() + 20);
		
	}

}

Baby Class

package com.kh.chap02_abstractAndInterface.part02_basic.model.vo;

public class Baby extends Person implements Basic{	// 상속 => 단일상속 | 다중상속 => 인터페이스

	public Baby() {
		
	}
	
	public Baby(String name, double weight, int health) {
		super(name, weight, health);
	}
	
	@Override
	public String toString() {
		return super.toString();
	}
	
	@Override
	public void eat() {
		// 밥먹으면 몸무게 3증가
		super.setWeight(super.getWeight() + 3);
		// 건강도 1증가
		super.setHealth(super.getHealth() + 1);
	}

	@Override
	public void sleep() {
		// 잠자면 건강도 3 증가
		super.setHealth(super.getHealth() + 3);
		
	}
	
}

실행 Class

package com.kh.chap02_abstractAndInterface.part02_basic.run;

import com.kh.chap02_abstractAndInterface.part02_basic.model.vo.Baby;
import com.kh.chap02_abstractAndInterface.part02_basic.model.vo.Mother;
import com.kh.chap02_abstractAndInterface.part02_basic.model.vo.Person;

public class BasicRun {

	public static void main(String[] args) {

		
//		Person p = new Person(); 추상클래스라서 객체 생성 안됨
		Person mom = new Mother("김엄마", 50, 70, "출산");
		Person baby = new Baby("김아기", 3.5, 70);
		
		System.out.println(mom);
		System.out.println(baby);
		
		// 동적 바인딩
		mom.eat(); // 몸무게 + 10 / 건강도 - 10
		baby.eat();	// 몸무게 + 3 / 건강도 + 1
		
		mom.sleep();	// 건강도 + 20, 
		baby.sleep();	// 건강도 + 3
		
		System.out.println("==========다음날============");
		System.out.println(mom);
		System.out.println(baby);
	}

}

실행 결과


인터페이스 사용 후

인터페이스 생성

package com.kh.chap02_abstractAndInterface.part02_basic.model.vo;

public interface Basic {

	// 추상클래스(abstract Class) : 일반필드 + 일반메소드 [+ 추상메소드]
	// 인터페이스(interface) : only 상수필드 + 추상메소드
	
//	private int a;
	
	/*
	public void test() {	=> 얘 못쓴다.
		
	}
	*/ 
	
	// 인터페이스에서의 필드는 무조건 상수필드임!!
	/*public static final*/ int NUM = 10;
	
	// 인터페이스에서의 메소드는 무조건 추상 메소드임!!
	/*public abstract*/ void eat();
	/*public abstract*/ void sleep();	// public abstract 생략가능
}

Person Class

package com.kh.chap02_abstractAndInterface.part02_basic.model.vo;

public abstract class Person {

	private String name;
	private double weight;
	private int health;
	
	public Person() {
		
	}
	
	public Person(String name, double weight, int health) {
		this.name = name;
		this.weight = weight;
		this.health = health;
	}
	
	public String getName() {
		return name;
	}
	
	public void setName(String name) {
		this.name = name;
	}
	
	public double getWeight() {
		return weight;
	}
	
	public void setWeight(double weight) {
		this.weight = weight;
	}
	
	public int getHealth() {
		return health;
	}
	
	public void setHealth(int health) {
		this.health = health;
	}
	
	public String toString() {
		return "name : " + name + ", weight : " + weight + ", health : " + health;
	}
	
//	public abstract void eat();
//	public abstract void sleep();
}

Mother Class (인터페이스 사용 전과 같다.)

package com.kh.chap02_abstractAndInterface.part02_basic.model.vo;

public class Mother extends Person implements Basic {

	private String babyBirth; // 아이의 탄생	출산|입양|없음
	
	public Mother() {
		
	}
	
	public Mother(String name, double weight, int health, String babyBirth) {
		super(name, weight, health);
		this.babyBirth = babyBirth;
	}
	
	public String getBabyBirth() {
		return babyBirth;
	}
	
	public void setBabyBirth(String babyBirth) {
		this.babyBirth = babyBirth;
	}

	@Override
	public String toString() {
		return super.toString() + ", babyBirth : " + babyBirth;
	}
	
	@Override
	public void eat() {
		// 밥먹으면 몸무게 10증가
		super.setWeight(super.getWeight() + 10);
		
		// 건강도 10 감소
		super.setHealth(super.getHealth() - 10);
	}

	@Override
	public void sleep() {
		// 잠자면 건강도 20 증가
		super.setHealth(super.getHealth() + 20);
		
	}

}

Baby Class (인터페이스 사용 전과 같다.)

package com.kh.chap02_abstractAndInterface.part02_basic.model.vo;

public class Baby extends Person implements Basic{	// 상속 => 단일상속 | 다중상속 => 인터페이스

	public Baby() {
		
	}
	
	public Baby(String name, double weight, int health) {
		super(name, weight, health);
	}
	
	@Override
	public String toString() {
		return super.toString();
	}
	
	@Override
	public void eat() {
		// 밥먹으면 몸무게 3증가
		super.setWeight(super.getWeight() + 3);
		// 건강도 1증가
		super.setHealth(super.getHealth() + 1);
	}

	@Override
	public void sleep() {
		// 잠자면 건강도 3 증가
		super.setHealth(super.getHealth() + 3);
		
	}
	
}

실행 Class

package com.kh.chap02_abstractAndInterface.part02_basic.run;

import com.kh.chap02_abstractAndInterface.part02_basic.model.vo.Baby;
import com.kh.chap02_abstractAndInterface.part02_basic.model.vo.Basic;
import com.kh.chap02_abstractAndInterface.part02_basic.model.vo.Mother;

public class BasicRun {

	public static void main(String[] args) {
		
//		Basic b = new Basic(); // 래퍼런스 변수로는 사용 가능하나 객체 생성은 불가능함
		Basic mom = new Mother("김엄마", 50, 70, "출산");
		Basic baby = new Baby("김아기", 3.5, 70);
		
		System.out.println(mom);
		System.out.println(baby);
		
		mom.eat();
		baby.eat();
		
		mom.sleep();
		baby.sleep();
        
		System.out.println("==========다음날============");
		System.out.println(mom);
		System.out.println(baby);

	}

}

실행 결과


클래스에서 클래스를 상속받을 때 : 클래스 extend class : (단일 상속만 가능) : 화살표 실선
클래스에서 인터페이스를 구현할때 : 클래스 implements 인터페이스1, 인터페이스2, ... (다중구현가능) : 화살표 점선
인터페이스에서 인터페이스를 상속 : 인터페이스 extends 인터페이스1, 인터페이스2, ...(다중상속가능) : 화살표 실선

    'JAVA' 카테고리의 다른 글
    • [자바/JAVA] 프로그래밍 - API_String (1) String Pool
    • [자바/JAVA] 프로그래밍 - API_Math
    • [자바/JAVA] 프로그래밍 - 다형성 (Polymorphism) - 추상(abstract)
    • [자바/JAVA] 프로그래밍 - 다형성 (Polymorphism)
    21종
    21종
    코딩 공부한 것 정리하려고 만든 블로그

    티스토리툴바