방송대 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 개념 - 중