728x90

"자바로 배우는 자료구조" 동영상 강의를 듣고 있다.

"자료구조와 함께 배우는 알고리즘 입문" 자바편 책과는 무관하다.

처음에는 이 책의 동영상 강의인줄 알고 찾아서 듣기 시작했는데, 강의를 들으면서 내가 몰랐던 부분, 놓치고 있던 부분 등을 알 수 있어 많은 도움이 된다.


다형성이 자바의 핵심이라고 하면서 C++과 가장 다른 점이라고 강조를 한다.

동영상 강의를 들을 때는 알 거 같은데 막상 뒤돌아서면 머리속에 남는게 없다. 아직 내 것으로 만들지 못해서다.

자바의 정석 책을 꺼내서 다형성 부분을 살펴보니까 강의에서 했던 내용이랑 거의 비슷하게 설명이 잘 되어 있다.


- 수퍼클래스 타입의 참조변수가 서브클래스 타입의 객체를 참조할 수 있다.

   Computer test = new Notebook();



출처: https://link2me.tistory.com/1269?category=942905 [소소한 일상 및 업무TIP 다루기]

- 수퍼클래스 타입의 참조변수가 서브클래스 타입의 객체를 참조할 수 있다.

   Computer test = new Notebook();



출처: https://link2me.tistory.com/1269?category=942905 [소소한 일상 및 업무TIP 다루기]

다형성(Polymorphism)

- 수퍼클래스 타입의 참조변수가 서브클래스 타입의 객체를 참조할 수 있다.

   Computer test = new Notebook();



출처: https://link2me.tistory.com/1269?category=942905 [소소한 일상 및 업무TIP 다루기]

다형성(Polymorphism)

- 수퍼클래스 타입의 참조변수가 서브클래스 타입의 객체를 참조할 수 있다.

   Computer test = new Notebook();



출처: https://link2me.tistory.com/1269?category=942905 [소소한 일상 및 업무TIP 다루기]
지금까지 우리는 생성된 인스턴스를 다루기 위해서, 인스턴스의 타입과 일치하는 타입의 참조변수만을 사용했다.

Notebook notebook = new Notebook();

Computer computer = new Computer();



수퍼 클래스 타입의 참조변수로 서브 클래스 타입의 객체를 참조할 수 있다. (동영상 강의)

조상 클래스 타입의 참조변수로 자손 클래스의 인스턴스를 참조할 수 있도록 하였다. (자바의 정석)


클래스가 상속관계에 있는 경우 조상 클래스 타입의 참조변수로 자손 클래스의 인스턴스를 참조하는 것도 가능하다.

Computer test = new Notebook();


반대로 자손 타입의 참조변수로 조상 타입의 인스턴스를 참조하는 것은 불가능하다.

참조변수가 사용할 수 있는 멤버의 개수는 인스턴스의 멤버 개수보다 같거나 적어야 한다.


아래 예제는 생활코딩 강좌와 자바의 자료구조 강좌를 혼용하여 작성했다.

생활코딩 강좌가 개념을 좀 더 명확하게 해주는 거 같기는 하다. 자바 자료구조 강좌가 실제 코딩에 좀 더 접근한 설명으로 도움이 되는 부분도 있고 둘 다 들어보면 좋을 거 같다.


package section2;

class A {
    public String x() {    return "A.x"; }
}

class B extends A {
    String screensize ="1920";
    public String x() {
        String result = super.x() + "/" + screensize;
        return result;
    }

    public String y() { return "y"; }
}

class B2 extends A {
    public String x() { return "B2.x"; }
}

interface I1 {
    public String A();
}

interface I2 {
    public String B();
}

class C implements I1, I2 {

    @Override
    public String B() { return "B"; }

    @Override
    public String A() { return "A";    }
}

public class PolymorphismDemo1 {

    public static void main(String[] args) {
        A obj = new B();
        // 수퍼 클래스(조상) 타입의 참조변수로 서브 클래스(자손) 타입의 객체를 참조할 수 있다.
        // 반대로 자손 타입의 참조변수로 조상 타입의 인스턴스를 참조하는 것은 불가능하다.
        System.out.println(obj.x()); // 출력 : A.x/1920, dynamic binding
        // 클래스 B를 클래스 A의 데이터 타입으로 인스턴스화 했을 때,

        // 클래스 A에 존재하는 맴버만이 클래스 B의 맴버가 된다.
        // 동시에 클래스 B에서 오버라이딩한 맴버의 동작방식은 그대로 유지한다.
        //obj.y(); // 존재하지 않는 메소드처럼 실행되지 않는다.
       
        A obj2 = new B2();
        System.out.println(obj2.x()); // 출력 : B2.x, 두 인스턴스의 메소드 x를 호출한 결과는 서로 다르다.
       
        C obj3 = new C();
        I1 objI1 = new C();
        I2 objI2 = new C();

        System.out.println(obj3.A()); // 출력 : A
        System.out.println(obj3.B()); // 출력 : B
        System.out.println(objI1.A()); // 출력 : A
        System.out.println(objI2.B()); // 출력 : B
    }

}





'안드로이드 > Java 문법' 카테고리의 다른 글

Java 제네릭(Generic)  (0) 2019.08.27
Java 추상 클래스  (0) 2019.08.19
How to validate IP address with regular expression  (0) 2019.06.17
자바 클래스 개념 이해 예제  (0) 2019.05.27
자바 Arraylist  (0) 2019.05.26
블로그 이미지

Link2Me

,