19. 자바(JAVA) - <T extends 클래스> 사용하기

병호·2023년 7월 15일

자바

목록 보기
19/24

상위 클래스의 의무

1. T 자료형의 범위를 제한할 수 있음

2. 상위 클래스에서 선언하거나 정의하는 메서드를 전달할 수 있음

3. 상속을 회수하지 않는 경우 T는 객체로 변환되어 객체 클래스가 기본으로 제공하는 방법만 사용 가능

T extends를 사용하여 프로그래밍

GenericPrinter 에 재료의 자료형을 상속 받아 구현

T에 과외 수업이 중단될 수 있지만 재료 수업을 받지 못한 수업으로 제한

Material.java

public abstract class Material { //Material 추상 클래스 정의
	
	public abstract void doPrinting(); //추상메소드 정의
}

Powder.java

public class Powder extends Material{ //Material 클래스를 상속받은 Powder클래스
		
	public void doPrinting() {
		System.out.println("Powder 재료로 출력합니다");
	}
	
	public String toString() {
		return "재료는 Powder 입니다";
	}
}

Plastic.java

public class Plastic extends Material{ 

	public void doPrinting() {
		System.out.println("Plastic 재료로 출력합니다");
	}
	
	public String toString() {
		return "재료는 Plastic 입니다";
	}
}

GenericPrinter.java

public class GenericPrinter<T extends Material> { //Material 클래스를 상속받은 제네릭 클래스
	private T material;
	
	public void setMaterial(T material) {
		this.material = material;
	}
	
	public T getMaterial() {
		return material;
	}
	
	public String toString(){
		return material.toString();
	}
	
	public void printing() {
		material.doPrinting();
	}
}

GenericPrinterTest.java

public class GenericPrinterTest {

	public static void main(String[] args) {

		GenericPrinter<Powder> powderPrinter = new GenericPrinter<Powder>();
		powderPrinter.setMaterial(new Powder());
		Powder powder = powderPrinter.getMaterial(); // 형변환 하지 않음
		System.out.println(powderPrinter);
		
		GenericPrinter<Plastic> plasticPrinter = new GenericPrinter<Plastic>();
		plasticPrinter.setMaterial(new Plastic());
		Plastic plastic = plasticPrinter.getMaterial(); // 형변환 하지 않음
		System.out.println(plasticPrinter);
		
	/*	GenericPrinter powderPrinter2 = new GenericPrinter();
		powderPrinter2.setMaterial(new Powder());
		Powder powder = (Powder)powderPrinter.getMaterial();
		System.out.println(powderPrinter);
		*/
		//GenericPrinter<Water> printer = new GenericPrinter<Water>();	
	}
}
profile
안녕하세요

0개의 댓글