반응형

# 상속관계에서 객체생성 방법

## 상속관계에서 객체 생성 방법

  • 객체 생성 : new 연산자와 생성자 메서드 활용하여 객체 생성.
  • 상속관계(부모-자식)에서 객체 생성 : 나(하위 클래스)를 기준으로 나라는 존재가 만들어지기 전에, 부모(상위 클래스)가 먼저 만들어져야 한다.
  • 간접 이용 : 상위(부모)클래스를 이용하는 방식 (하위 클래스의 동작 방식을 모를 때, class 파일(=실행파일)만 있고 java 파일(=소스파일)은 없을 때 사용). 이때 하위 클래스를 접근할 수 없음, 재정의(오버라이드)를 이용하면 가능 함.
Animal dog = new Dog();
dog.eat();

Animal cat = new Dog();
cat.eat();
cat.night();
  • 직접 이용 : 상위(부모)클래스를 이용하지 않는 방식.
Dog dog = new Dog();
dog.eat();

Cat cat = new Cat();
cat.eat();
cat.night();

##상속관계에서 객체 생성 방법 (실습)

  • 모든 클래스는 상속을 받지 않으면 기본적으로 루트 클래스인 Object 클래스(최상위 클래스)를 상속받음.
  • 다형성 : 상위(부모) 클래스가 하위(자식) 클래스에게 동일한 메시지를 보내면 하위 클래스가 서로 다르게 동작하는 것. (상속 관계에서 업캐스팅 시 적용)
public class Animal extends Object {
	public void eat() {
		System.out.println("?");	// 포괄적, 추상적.
	}
	
	public Animal() {
		super();	// new Object();
	}
}
public class Dog extends Animal {
	// 이름, 나이, 종 등 : 상태정보 존재.
	
	// 재정의(override)
	public void eat() { 
		System.out.println("멍멍이 처럼 먹는다."); 
	}	
	
	public Dog() {
		super();	// new Animal();
	}
}
public class Cat extends Animal {
	// 이름, 나이, 종 등 : 상태정보 존재.
	
	@Override
	public void eat() { 
		System.out.println("고양이 처럼 먹는다."); 
	}
	
	
	public void night() {
		System.out.println("고양이는 밤에 눈에서 빛이 난다.");
	}
	
	public Cat() {
		super();	// new Animal();
	}
}
public class TPC22 {
	public static void main(String[] args) {
		// 재정의(오버라이드) 유무에 따라 하위(자식)클래스의 메서드 구동 가능 여부가 결정됨.
		// 1. 직접 이용
		Dog dog = new Dog();
		dog.eat();
		
		Cat cat = new Cat();
		cat.eat();
		cat.night();
		
		// 2. 간접 이용	: 상속관계가 선행되어야 사용 가능.
		Animal d = new Dog();	// UpCasting (자동 형 변환)
		d.eat();
		
		Animal c = new Cat();
		c.eat();
		((Cat)c).night();	// DownCasting (강제 형 변환)
	}
}
반응형

+ Recent posts