java 기초 공부 내용 정리(다형성)

홍준성·2022년 6월 3일
0

java 기초 공부

목록 보기
20/39

다형성

한 가지의 타입이 여러 가지 형태의 인스턴스를 가질 수 있는 것

다형성의 여러 방법

부모 자식간의 casting(형 변환)

업 캐스팅

자식 클래스의 객체가 부모클래스의 참조 변수로 형 변환 되는 것(아래에서 위로 올라간다.)
→ 동적 바인딩(컴파일 시점에선 부모클래스의 필드로 인지하나, 런타임 시점에선 자식클래스의 필드로 호출할 메서드를 묶는 것

부모클래스 변수 = 자식 객체값;

Student클래스의 grade는 업캐스팅이 불가하다.
왜냐면 부모 클래스인 Human에는 관련 매개변수가 없기 때문
name, age, hobby는 부모 클래스에도 있기 때문에 내용이 추가되어도 업캐스팅이 됨

	public static void main(String[] args) {
		Student st1 = new Student("가길동",13,"게임하기", 3);
		st1.info();
		//업캐스팅
		Human h1 = new Student("나길동", 17,"롤하기",3);
		h1.info();
		
	}
}


class Human {
	String name;
	int age;
	String hobby;
	public Human(String name, int age, String hobby) {
		super();
		this.name = name;
		this.age = age;
		this.hobby = hobby;
	}
	
	void info() {
		System.out.println("name:"+name);
		System.out.println("age:"+age);
		System.out.println("hobby"+hobby);
	}
	
}

class Student extends Human{
	int grade;
	public Student(String name, int age, String hobby, int grade) {
		super(name, age, hobby);
		this.grade = grade;
	}
	void info() {//오버라이딩
		super.info();
		System.out.println("grade:"+grade);
	}
	
}

다운 캐스팅

업 캐스팅 된 부모클래스의 객체가 자식클래스의 참조 변수로 형 변환 되는 것

자식 클래스 변수 = (자식 클래스) 업 캐스팅 된 부모 참조변수;

(주의사항)
1. 업캐스팅 된 변수만 가능
2. 명시적 형 변환

위 예시에서 다운캐스팅을 한다면,

Student st1 = new Student("가길동",13,"게임하기", 3);
//업캐스팅
Human h1 = new Student("나길동", 17,"롤하기",3);

//다운캐스팅
Student s1 = (Student)h1;
		
	public static void main(String[] args) {
		Animal lion1= new Lion();
		Animal rabbit1= new Rabbit();
		Animal monkey1= new Monkey();

		ZooKeeper james = new ZooKeeper();
		james.feed(lion1);
		james.feed(rabbit1);
		james.feed(monkey1);
		
	}
}

class Animal{
	void breath() {System.out.println("숨쉬기");}
}
class Lion extends Animal{
	public String toString() {
		return "사자";
	}
}

class Rabbit extends Animal{
	public String toString() {
		return "토끼";
	}
}

class Monkey extends Animal{
	public String toString() {
		return "원숭이";
	}
}

class ZooKeeper{
	void feed(Animal animal) {
		System.out.println(animal+"에게 먹이주기");
	}
}
profile
준성이의 개발자 공부 velog

0개의 댓글