티스토리 뷰
다형성과 형변환
다형성
- 하나의 객체가 다양한 형상이나 다양한 기능을 가진다는 뜻
* 하나의 클래스에서 오버로딩된 메소드들은 유사하지만 조금씩 다른 기능을 수행함
* 자식 클래스에서 재정의된 메소드는 부모 유사하지만 다른 기능을 수행함
형 변환
- 상속 관계에 있는 클래스 간에는 타입 변환이 가능함
* 전혀 다른 두 클래스 간에는 타입 변환이 금지됨
- 하위 클래스에서 상위 클래스로의 형 변환은 문제없음
* 상위 유형의 변수는 하위 객체의 참조값을 가질 수 있음
다형성과 오버라이딩
클래스의 다형성
- 부모 클래스로부터 상속받은 메소드를 자식 클래스에서 오버라이딩할 수 있음
- 부모와 자식에서 같은 이름의 메소드가 다른 기능을 수행
* 같은 이름과 매개 변수 및 반환형을 가지나 몸체가 다름
인터페이스의 다형성
- 자식 클래스들에서 상위 인터페이스의 메소드를 다르게 구현함
클래스 상속과 다형성
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | class A { public void func() { System.out.println(“a”); } } class B extends A { public void func() { System.out.println(“b”); } } class C extends B { public void func() { System.out.println(“c”); } } public class PolymorphTest { public static void main(String args[]) { A a = new B(); a.func(); a = new C(); a.func(); } } | cs |
b
c
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | class Employee{ int nSalary; String szDept = null; public void doJob() { System.out.println("Do something"); } } class Sales extends Employee{ public Sales() { szDept = "Sales Dept"; } public void doJob(){ System.out.println("Do sales"); } } class Development extends Employee{ public Development() { szDept = "Sales Dept"; } public void doJob() { System.out.println("Do development"); } } public class Company1 { public static void main(String args[]) { Employee emp1, emp2; emp1 = new Sales(); emp2 = new Development(); emp1.doJob(); emp2.doJob(); } } | cs |
Do sales
Do development