728x90
반응형

문제1

아래의 Fruit 클래스와 main를이용해 Banana, Orange, Apple 클래스를 작성하라.

  • Fruit 클래스 상속 받아 Banana, Orange, Apple 클래스 생성
  • 3개의 클래스는 int형 price 변수를 가지며, 생성자를 통해 초기화
  • main 에서 다음 과정을 통해 객체 생성
  • Banana banana = new Banana ("바나나", "노란색", 1000);
  • Orange orange = new Orange ("오렌지", "주황색", 2000);
  • Apple apple = new Apple ("사과", "빨간색", 1500);

 

 

▶ Banana 코드

public class Orange extends Fruit{
	private int price;
	
	Orange(String name, String color, int price){
		super(name, color);
		this.price=price;
	}

	public int getPrice() {
		return price;
	}
	public void SetPrice(int price){
		this.price=price;
	}
}

 

 

▶ Orange 코드

public class Orange extends Fruit{
	private int price;
	
	Orange(String name, String color, int price){
		super(name, color);
		this.price=price;
	}

	public int getPrice() {
		return price;
	}
	public void SetPrice(int price){
		this.price=price;
	}
}

 

 

▶ Apple 코드

public class Apple extends Fruit{
	private int price;
	
	Apple(String name, String color, int price){
		super(name, color);
		this.price=price;
	}

	public int getPrice() {
		return price;
	}
	public void SetPrice(int price){
		this.price=price;
	}
}

 

 

 

문제2

main문에 이름을 출력하는 pack()을 만들어 아래 내용을 출력하시오. 업캐스팅을 이용하시오.

바나나를 담았습니다.
오렌지를 담았습니다.
사과를 담았습니다.

 

 

▶ main 코드

	static void pack(Fruit fruit){
		System.out.println(fruit.getName()+"를 담았습니다.");
	}//슈퍼클래스인 Fruit 타입으로 업캐스팅
	
	public static void main(String[] args) {
		Banana banana = new Banana("바나나","노란색",1000); //바나나 객체
		Orange orange = new Orange("오렌지","주황색",1500); //오렌지 객체
		Apple apple = new Apple("사과","빨간색",2000); //사과 객체
		
		pack(banana);
		pack(orange);
		pack(apple);
	}//main_end

 

 

▶ 출력 결과

바나나를 담았습니다.
오렌지를 담았습니다.
사과를 담았습니다.

 

 

 

문제3

main문에 금액과 이름을 출력하는 pack()을 만들어 아래 내용을 출력하시오. instanceof와 다운캐스팅을 이용하시오.

1000원짜리 바나나를 담았습니다.
1500원짜리 오렌지를 담았습니다.
2000원짜리 사과를 담았습니다.

 

 

▶ pack 코드

※ fruit.getPrice();업캐스팅했기 때문에 바로 접근할 수 없다. 다운캐스팅을 이용하면 fruit.getPrice()에 접근이 가능하다.

	static void pack(Fruit fruit){ //슈퍼클래스인 Fruit 타입으로 업캐스팅
		int price=0;
		if(fruit instanceof Banana) //fruit가 Banana 타입이면 true
			price =((Banana)fruit).getPrice(); //다운캐스팅
		else if(fruit instanceof Orange)
			price =((Orange)fruit).getPrice();
		else if(fruit instanceof Apple)
			price =((Apple)fruit).getPrice();
		
		System.out.println(price+"원짜리 "+fruit.getName()+"를 담았습니다.");
	}
  •  if문 안에 instanceof를 작성하여 어떤 객체인지 확인한다.
  • 조건문이 객체와 일치하여 true(참)가 되면 조건문 안의 내용이 실행된다.

 

 

▶ 출력 결과

1000원짜리 바나나를 담았습니다.
1500원짜리 오렌지를 담았습니다.
2000원짜리 사과를 담았습니다.

 

 

 

문제4

fruit 클래스에 view 메소드를 정의하고, Banana 클래스에서 오버라이딩을 이용해 재정의하여 아래 내용을 출력하시오.

	void view(){
		System.out.println("종류:"+name+",색:"+color);
	}

결과:원숭이가 좋아하는 바나나=>종류:바나나,색:노란색

 

 

▶ Banana  코드

	void view(){
		System.out.print("원숭이가 좋아하는 바나나=>");
		super.view();//부모클래스의 view() 호출
	}//오버라이딩(재정의)

 

 

▶ main  코드

		banana.view();

 

 

728x90
반응형
728x90
반응형

<오늘의 학습>

1. 업캐스팅

2. 다운캐스팅

3. instanceof

4. 오버라이딩

5. 오버로딩

6. 연결 리스트 (Linked list)

 

 

1.  업캐스팅

  • 서브 클래스 객체를 슈퍼 클래스 타입으로 타입 변환하는 것
  • 업캐스팅된 레퍼런스는 객체 내에 슈퍼 클래스의 멤버만 접근이 가능하다.
class Person {...}
class Student extends Person {...}

Student s = new Student();
Person p = s;//업캐스팅 자동타입 변환
Person p = new Student();//업캐스팅
  • 레퍼런스 p를 이용하면 Student 객체의 멤버 중 Person의 멤버에만 접근이 가능하다.

 

 

 

2.  다운캐스팅

  • 슈퍼 클래스 객체를 서브 클래스 타입으로 변환하는 것
  • 개발자의 명시적 타입 변환 표시가 필요하다.
		class Person {...}
		class Student extends Person {...}
	
		Person p = new Student();//업캐스팅
		Student s;
		s = (Student)p; //다운캐스팅

 

 

 

3.  instanceof

  • 레퍼런스가 가리키는 객체의 타입 식별을 위해 사용한다. 슈퍼 클래스는 여러 서브 클래스에 상속되기 때문에 업캐스팅된 레퍼런스로 객체의 타입을 판단하는 것이 어렵기 때문이다.
  • 사용 : 객체 레퍼런스 instanceof 클래스타입
  • 연산의 결과는 true와 false의 boolean 값으로 나온다.

 

 

 

실습 내용

 

[JAVA] 과일 예제 (업캐스팅/다운캐스팅)

문제1 아래의 Fruit 클래스와 main를이용해 Banana, Orange, Apple 클래스를 작성하라. Fruit 클래스 상속 받아 Banana, Orange, Apple 클래스 생성 3개의 클래스는 int형 price 변수를 가지며, 생성자를 통해 초기화

deliciouscode.tistory.com

 

 

 

 

다음 학습

 

[JAVA] 오버라이딩과 오버로딩, 연결 리스트 (14일차)

1. 업캐스팅 2. 다운캐스팅 3. instanceof 4. 오버라이딩 5. 오버로딩 6. 연결 리스트 (Linked list) 4. 오버라이딩 (재정의) 슈퍼 클래스에 선언된 메소드를, 각 서브 클래스들이 자신만의 내용으로 새로 구

deliciouscode.tistory.com

 

728x90
반응형

+ Recent posts