티스토리 뷰

반응형



개발일지 7일차(2018-07-17)

전체 목록, 진행 상황 보기 : 링크 



다형성이란?


다형성이란 하나의 메소드나 클래스가 있을 때 이것들이 다양한 방법으로 동작하는 것을 의미한다. 키보드의 키를 통해서 비유를 들어보겠다. 키보드의 키를 사용하는 방법은 '누른다'이다. 하지만 똑같은 동작 방법의 키라고 하더라도 ESC는 취소를 ENTER는 실행의 목적을 가지고 있다. 다형성이란 동일한 조작방법으로 동작시키지만 동작방법은 다른 것을 의미한다.


객체의 형 변환


Java 기본 유형의 데이터들처럼 객체 참조변수의 경우에도 형  변환(casting)이 이루어진다. 서로 다른 클래스 유형으로부터 나온 객체 참조변수들 간의 대입에는 일정한 규칙이 있다.


Example Source Code1


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
39
40
41
42
43
44
45
46
47
package step1.review;
 
class Animal{// extends Object 
    // Animal(){super();}
    public void sleep() {
        System.out.println("자다");
    }
    public void eat() {
        System.out.println("먹다");
    }
}
class Person extends Animal{
    // 메서드 오버라이딩 : 부모 메서드를 자신에 맞게 구현부를 재정의 
    public void eat() { 
        System.out.println("수저로 먹다");
    }
    public void study() {
        System.out.println("공부하다");
    }
}
public class TestReview {
    public static void main(String[] args) {
        //일반적인 방식으로 객체 생성 
        //Person p=new Person();
        //다형성을 테스트하기 위해 부모 타입의 변수로 자식 객체를 참조 
        Animal a=new Person();
        //최상위 클래스 Object로부터 상속받았으므로 사용가능 
        System.out.println(a.toString());
        a.sleep();//Animal 로부터 상속받았으므로 사용가능 
        a.eat();// 메서드 오버라이딩 했으므로 사용가능 
        //a.study(); // Animal 타입의 변수로 참조했으므로 직접 접근 불가 
        // Object casting 해서 접근하면 된다 
        ((Person)a).study();
        AnimalService service=new AnimalService();
        service.pass(new Person());        
    }
}
class AnimalService{
    public void pass(Animal a) {
        System.out.println(a.toString());//상속
        a.sleep();//상속
        a.eat();//오버라이딩 
        if(a instanceof Person) {// instanceof : is a 관계이면 true 
            ((Person) a).study();//Person의 독자적 멤버이므로 객체 캐스팅 
        }
    }
}
cs


Example Source Code2


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package step2;
class Car{}
class Animal{}
class Person extends Animal{}
class Dog extends Animal{}
public class TestPolymorphismArray {
    public static void main(String[] args) {
        Car[] carArray=new Car[3];
        carArray[0]=new Car();
        carArray[1]=new Car();
        //carArray[2]=new Dog();// Car 타입의 배열이므로 Dog 객체를 요소로
        //담을 수 없다 compile error 
        Animal [] ani=new Animal[3];
        ani[0]=new Animal();
        ani[1]=new Dog();//다형성 적용되므로 자식객체를 요소로 담을 수 있다 
        ani[2]=new Person(); // 자식객체이므로 가능하다 
    }
}
cs

반응형
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크