방송대 java 프로그래밍 리뷰 / 난이도 / 시험문제

<Java 메소드 오버라이등 - 중요 개념>

    자바는 매우 강력한 언어이다. 바꿔 말하면, 상당히 어려운 언어이기도하다. 아래의 메소드 오버라이딩을 보면 그게 무슨 말인지 알것이다.
    아래의 코드를 보면, Shape()은 부모 클라스 이고, Triangle()은 자식 클라스이다. 아래의 extends를 보면 알수 있다. 참고로, java class는 다중 상속이 되지 않는다. (인터페이스는 되지만) 이것은 중요한 개념이면서 또한 시험문제이니까 알고 있어야 한다. 즉, 아래와 같이 한부모 한 자식의 관계여야 한다. 이야기가 잠깐 샛길로 빠졌지만, 아래의 코드에서는 12가 리턴될까? 아니면 6이 리턴될까?
    메인함수에서 보면, triangle() 클라스의 객체가 생성이 되었다(new). 이것을 가르치는 변수는 t이다(참조변수). 그런데, 이 참조변수각 Shape() 클라스의 모습을 띄고 있다. 
    자, 결론부터 얘기하면 리턴값은 6이다. 6이 되는 이유는 new로 생성된 객체가 Triangle()클라스의 객체이므로 getArea() 메소드를 Triangle() 클라스에서 찾는다. 만약에 없다면 상속받은 부모 클라스에서 해당 메쏘드를 찾을 것이다. 이번 경우에는 자식 클라스에서 getArea() 메소드가 정의 되어있으므로 당연히 Triangle() 클라스의 getArea() 메소드를 호출한다(다시말하지만, new로 생성된 객체가 Triangle() 클라스의 객체이기 때문이다)
    그렇다면, 

Shape t = new Triangle();

노란색 부분은 왜 Triangle이 아니고 Shape로 되어 있는가?

Java의 클라스 상속관계에서, 부모는 자식을 가리킬 수 있다. 위의 예제에서

 Triangle t = new Triangle()

와 같이 위의 모습으로 해도 같은 결과가 나온다. 하지만, 부모 클라스의 유형으로 자식 클라스의 객체를 가리킬 수 있다는 것을 보여주는 예시이다.(중요 개념임) 


<this 개념 - 중요개념>



<super 개념 - 중요개념>

아래와 같이 super.x라고 하면 명획히 부모의 x값 즉, 0이 호출된다. 또한, 아래와 같이  super.f();라고 하면 부모의 f(); 메소드가 호출된다.



<this / super 예제- 중요개념>




<왼쪽은 일반적인 코딩 - 오른쪽은 메소드 체이닝 코딩>

<중요개념: 메소드 체이닝에서는 객체를 반환함>





 <java 기본>






[출처: 방송대]

댓글

이 블로그의 인기 게시물

image_insert_vba (vba로 만든 이미지 자동 삽입기)

IT 개발자 다이어리 - 2024년 6월 7일 금요일 / 날씨: 흐리다가 맑아짐

Privacy Policy(Chicken Fight - 닭싸움)