도라에몽주머니

[Java/Eclipse] Java 30일차 본문

Study/Java

[Java/Eclipse] Java 30일차

에몽쓰 2022. 10. 27. 16:45

 

Java

 

동적바인딩(Dynamic Binding)

: 실행중에 동작할 객체를 선택(생성)하는 것

 

예제

interface와 다형성을 이용하여 프로그램을 완성하시오. (동적바인딩)

1. Shape.java → 인터페이스

- 멤버메소드

onDraw():void
onDelete():void

 

2. Rectangle.java → Shape 상속

 

3. Circle.java → Shape 상속

<실행 결과>
1.사각형 2.원 3.종료
select(1-3) : 1
사각형을 그린다
사각형을 지운다 

1.사각형 2.원 3.종료
select(1-3) : 2
원을 그린다
원을 지운다

// Prac1.java
package prac1;

import java.util.Scanner;

public class Prac1 {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		// 부모 객체로 생성 ; 기본값 null
		Shape shape = null;

		
		while(true) {
			System.out.println("1.사각형 2.원 3.종료");
			System.out.print("select(1-3) : ");
			int choose = sc.nextInt();
			if(choose == 1) {
				// 선택되는 case마다 원하는 자식 객체 생성
				shape = new Rectangle();
			} else if(choose == 2) {
				// 선택되는 case마다 원하는 자식 객체 생성
				shape = new Circle();
			} else if(choose == 3) {
				System.out.println("프로그램 종료.");
				break;
			}
			else System.out.println("1-3 사이의 숫자를 입력해주세요.");
			
			// else case에서 nullpointer error 발생하므로 null check
			if(shape != null) {
				shape.onDraw();
				shape.onDelete();
			}
			
			shape = null;
			System.out.println();
		}
	}
}
// Shape.java
package prac1;

public interface Shape {
	public void onDraw();
	public void onDelete();
}
// Rectangle.java
package prac1;

public class Rectangle implements Shape {

	@Override
	public void onDraw() {
		System.out.println("사각형을 그린다.");
	}

	@Override
	public void onDelete() {
		System.out.println("사각형을 지운다.");
	}

}
// Circle.java
package prac1;

public class Circle implements Shape {

	@Override
	public void onDraw() {
		System.out.println("원을 그린다.");
	}

	@Override
	public void onDelete() {
		System.out.println("원을 지운다.");
	}

}

 

 

중첩클래스(Nested Class)

: 클래스 내에 정의되어 있는 클래스

  • 일반 중첩 클래스
  • static 중첩 클래스
  • 지역 중첩 클래스
  • 익명 중첩 클래스

 

Static inner class

: 여러개의 클래스를 1개의 클래스로 모아서 사용할 경우, inner 클래스를 static으로 사용함

 

익명 클래스(Anonymous Class)

: 이름이 없는 클래스(= 무명 클래스). 자식 클래스로만 사용함

{
	변수;
	함수;
}

 

상속의 종류

  • 일반 상속 (일반 클래스)

: 일반 클래스로 자식 클래스를 만드는 것. 여러 곳에서 계속 사용할 경우 사용.

class AAA {
	void ex1() {
	}
	void ex2() {
	}
}
class BBB extends AAA {
	void ex2() {
	}
}
// 자식 기준
BBB bb = new BBB();
bb.ex1();
bb.ex2();

// 부모 기준
AAA aa = new BBB();
aa.ex1();
aa.ex2();
  • 약식 상속 (익명 클래스)

: 익명 클래스로 자식 클래스를 만드는 것. 한번만 상속해서 사용하는 경우 사용.

AAA aa = new AAA() {
	void ex2() {
	}
};
aa.ex1();
aa.ex2();

'Study > Java' 카테고리의 다른 글

[Java/Eclipse] Java 32일차  (0) 2022.10.31
[Java/Eclipse] Java 31일차  (0) 2022.10.28
[Java/Eclipse] Java 29일차  (0) 2022.10.26
[Java/Eclipse] Java 28일차  (0) 2022.10.25
[Java/Eclipse] Java 27일차  (0) 2022.10.24