abap oop 에서 접근제한 영역에 대해서 공부하고 있는데요.
super class에 해당하는 vehicle 클래스의 create 메소드를 protected section으로 선언한후에
서브클래스인 plane에서 부모클래스인 vehicle 클래스의 메소드인 create를 쓸경우에 error가 발생하게 되는데요.
원래 protected section을 선언할 경우에는 자신과 상속받은 서브클래스에서 상속해준 class의 속성과 메소드를
모두 쓸수 있다고 알고있는데...아래와 같이 선언시에 오류가 뜨네요...
혹시 수퍼클래스의 메소드는 항상 public으로 선언해줘야 되나요? 답변부탁드립니다.
*----------------------------------------------------------------------*
* CLASS vehicle DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
class vehicle definition inheriting from object.
protected section.
methods: create.
protected section.
data speed type i value '90'.
endclass. "vehicle DEFINITION
*----------------------------------------------------------------------*
* CLASS plane DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
class plane definition inheriting from vehicle.
public section.
methods: fly.
protected section.
data altitude type i.
endclass. "plane DEFINITION
*----------------------------------------------------------------------*
* CLASS vehicle IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
class vehicle implementation.
method create.
speed = speed + 1000.
write: / 'air777 is from pony'.
endmethod. "create
endclass. "vehicle IMPLEMENTATION
*----------------------------------------------------------------------*
* CLASS plane IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
class plane implementation.
method fly.
speed = speed + 1000.
write: 'fly speed is',speed.
endmethod. "fly
endclass. "plane IMPLEMENTATION
data: pony type ref to vehicle,
air777 type ref to plane.
start-of-selection.
create object : pony.
try.
air777 ?= pony. "기존의 객체 유형을 버리고 새로운 것은 객체의 속성을 받아들임.
catch cx_sy_move_cast_error.
endtry.
call method air777->create.
안돼죠. protected는 서브클래스에서 직접사용할 수 있음을 의미합니다.
즉 서브 클래스 실행부분에
class vehicle implementation.
method create.
speed = speed + 1000.
write: / 'air777 is from pony'.
call method create. "<<== 이렇게 사용가능함을 의미합니다.
endmethod. "create
endclass. "vehicle IMPLEMENTATION