N스크린하이브리드앱과정/JAVA

[2주][2일] 메서드 오버라이딩

광천스러움 2013. 7. 23. 16:53

*메서드 오버라이딩 하는법

1. 상속받을 서브클래스에서 단축키 alt+shift+s+v를 누른다.

 

2. 부모클래스 Parent에 체크하고, Insertion point 옵션에서 "First member"를 선택한 후 확인을 누른다.

 

 

*메서드 오버라이딩 실습(1)

다음과 같은 지시에 따라 코딩을 완성해 보자.

지시에 맞게 부모클래스와 자식클래스를 만들어준다.

 

b는 부모클래스의 객체이고

c는 자식클래스의 객체이다.

b.parentPrn()을 호출하면 부모클래스의 출력문이 출력될 것이고

c.childPrn()을 호출하면 자식클래스의 출력문이 실행될 것이다.

마지막으로 c.parentPrn()메서드는 자식클래스에서 메서드 오버라이딩을 한 것이므로, 자식클래스에서 오버라이딩한 출력문이 실행된다.

 

 

*메서드 오버라이딩 실습(2) 

Point2D에서 Point3D를 상속받아 값을 출력하는 프로그램이다.

 

 

 

*기본생성자 실습(1)

1. 부모 기본생성자

 

2. 자식 기본생성자

 

3. 메인 메서드

 

결과

 

 

*기본생성자 실습(2)

1. 부모클래스와 자식클래스에 모두 기본생성자를 생성.

 --> 그런데, 에러가 뜬다?

 

2. 수정된 코딩 결과물

 --> 부모클래스에서는 임의의 매개변수 x,y값을 받고, 자식클래스에서는 부모의 기본생성자 초기값을 넣어서 호출하도록 코딩한다.(super(1,2))

 

3. 메인 메서드

결과

 

참고

결과가 세개씩 출력되는데, 메인 메서드에서 앞의 p.print() 호출에 대해 알아보자.

Point3D클래스에서 오버라이딩 된 것을 보면, 3줄의 코딩이 되어있다.

1. super.print() --> 부모클래스의 print()메서드를 호출한다는 의미

2. sysout(super.x, super.y, this.z) --> 부모클래스의 x,y

                                                    자식클래스의 z 값을 출력한다는 의미

3. sysout(x,y,z) --> 자식클래스의 x,y,z를 출력한다는 의미

 

 

 

*접근지정자 실습

 - 부모클래스: AccessTest

 - 자식클래스: Subclass

 ※ 메인메서드: 자식클래스에 함께 위치.

 ※ 부모클래스와 자식클래스: 각각 다른 패키지에 위치.

 

1. AccessTest클래스에서  접근 지정자 설정

 --> a,b,c,d를 서로 다른 접근지정자로 각각 설정하였다.

 

2. Subclass클래스 설정: a와 b가 오류발생? 왜?

지금 이 클래스는 Ex18의 메인 메서드 위에 설정되어 있다. 즉, 부모클래스와 서로 다른 패키지에 위치하고 있으므로, private값인 a와 default값인 b는 출력이 되지 않고 오류가 발생한다.

 

3. Ex18클래스 설정: 어라? c도 오류가 발생하네?

객체를 생성할 때, AccessTest클래스, 즉 부모클래스로 설정했는데,

protected값인 c가 상속을 받은 경우에는 출력이 가능하지만,

위 그림처럼 "at.c"를 출력하는 경우, 부모클래스 안에 있는 c라는 매개변수를 바로 출력한다는 의미이므로 출력이 불가능하다.

그럼 가능한 경우는? 서브클래스를 객체 b로 지정하고 "b.c"를 출력하면 정상적으로 출력될 것이다.

Subclass b = new Subclass();

system.out.println("c= "+at.c);

 

적용된 결과