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

블로그 메뉴

  • 홈
  • 태그
  • 방명록

인기 글

최근 글

최근 댓글

hELLO · Designed By 정상우.
21종

종이의 코딩 공부방

JAVA

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

2023. 6. 13. 20:37

추상메소드

- 미완성된 메소드로 몸통부({})가 구현되어 있지 않은 메소드

추상클래스

- 미완성된 클래스 
- 일반필드 + 일반메소드 [+ 추상메소드]
=> 추상메소드를 가진 클래스는 반드시 추상클래스로 명시 해야됨

* 추상메소드가 굳이 없어도 추상클래스로 만들 수 있음
언제사용되나요?


  > 개념적 : 단지 이 클래스가 미완성된 클래스다 라는걸 부여할 목적 => 덜 만들었을때
  > 프로그래밍적 : 객체 생성이 불가 하게끔 라고자 할 때 

 *  추상메소드가 존재하는 추상클래스를 쓰는 이유
- 부모클래스에 추상메소드가 존재할 경우
자식클래스에서는 강제로 오버라이딩 해서 동일한 패턴의 메소드를 가지게 됨!!

=> 각 자식 클래스마다 실행시킬 내용은 다르지만 동일한 형태의 메소드로 구혔했으면 할 때
=> 메소드 통일성 확보 목적
=> 표준화된 틀을 제공할 목적 


Sports Class

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

public abstract class Sports {

	private int people;
	
	public Sports() {
	
	}
	
	public Sports(int people) {	
		this.people = people;	
	}
	
	public int getPeople() {	// 머리부
		return people;	// 몸통부	=> ** 이게 없으면 완벽한 메소드가 아님
	}
	
	public void setPeople(int people) {
		this.people = people;
	}
	
	@Override
	public String toString() {
		return "people : " + people;
	}
	
	// 추상 메소드(미완성된 메소드) 만들기
//	public void rule();	// 머리부만 있음.. 몸통부가 없다고 에러가남
	public abstract void rule();
	// 미완성된 메소드가 있다는 소리는 이 클래스도 아직 미완성 이라는 이야기
	
	// 그럼 언제 완성하나요..? => 해당 추상클래스를 상속 받는 자식에서 !!!
}

FootBall Class

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

public class FootBall extends Sports {

	@Override
	public void rule() {
		System.out.println("공을 발로만 다뤄야한다.");
	}

}

BasketBall Class

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

public class BasketBall extends Sports {
	
	// 자식클래스에 강제성을 부여하기 위함
	// basketball, football 이든 무조건 rule 이 있으니 반드시 rule 을 구현했으면 해서...
	
	// 추상메소드가 존재하는 추상클래스를 상속받는 순간
	// 부모클래스에 있던 추상메소드를 강제로 오버라이딩 해야됨
	
	
	
	@Override
	public void rule() {
		System.out.println("공을 항상  손으로만 다뤄야한다.");
	}

}

실행 Class

package com.kh.chap02_abstractAndInterface.part01_easy.run;

import com.kh.chap02_abstractAndInterface.part01_easy.model.vo.BasketBall;
import com.kh.chap02_abstractAndInterface.part01_easy.model.vo.FootBall;
import com.kh.chap02_abstractAndInterface.part01_easy.model.vo.Sports;

public class EasyRun {

	public static void main(String[] args) {

		// 추상클래스 객체 생성 불가 (왜? 미완성 클래스기 때문에!!)
//		Sports s = new Sports();
//		Sports s;	// 객체 생성이 안될 뿐이지 래퍼런스로는 사용 가능
//		Sports s = new BasketBall();	// 다형성 적용 시켜서 부모타입으로 자식객체를 받아주는 형태는 가능
		
		Sports[] arr = new Sports[2];	// 배열만 만든거
	//	부모				자식
		arr[0] = new BasketBall();
		arr[1] = new FootBall();
		
		// 단순 for문
		for(int i=0; i < arr.length; i++) {
			arr[i].rule();
		}
		
		// 향상된 for 문
		for(Sports a : arr) {	// a = arr[0], a = arr[1]
			a.rule();
		}
		// 여기서도 동적바인딩!!!
		/*
		 * 동적바인딩 : 컴파일 시점에서는 정적바인딩으로 현재 레퍼런스의 자료형의 클래스에 있는 메소드를 가리키긴함
		 * 			 런타임 시점(실행시점)에서는 동적바인딩으로 각각의 자식클래스에 오버라이딩 된 메소드가 있을 경우 그거 실행됨
		 */
	}

}

 

 

실행 결과

    'JAVA' 카테고리의 다른 글
    • [자바/JAVA] 프로그래밍 - API_Math
    • [자바/JAVA] 프로그래밍 - 다형성 (Polymorphism) - 추상(abstract) - Interface
    • [자바/JAVA] 프로그래밍 - 다형성 (Polymorphism)
    • [자바/JAVA] 프로그래밍 - 상속 (inheritance) 실습 문제_2
    21종
    21종
    코딩 공부한 것 정리하려고 만든 블로그

    티스토리툴바