상속관계에 있다보면.. 자식클래스는 (subclass) 부모의 자원을 쓸수 있고 부모클래스는 자식클래스의 매소드를 호출 할수있습니다. 만약 부모클래스와 자식클래스의 매소드 명칭이 똑같다면 우선순위는 자식클래스에 있습니다. 때론 여러 사람이 공동작업을 할때 공동으로 사용할 부모 클래스의 이름을 미리 약속하여 정해놓고 그이름대로 자식클래스에서 재정의 하여 리모델링 한다면.. 부모가 원하는 모델로 구상이 되어있기 때문에 자식클래스의 접근이 용이 하겠지요? 그래서 재정의가 안되면 error 를 발생하여 주의 하라는 경고를 주는겁니다.
간단히 예를들어보죠 [오리]라는 클래스가 있다고 하겠습니다. 이[오리] 클래스는 [난다()]라는 메서를 가집니다. 이 [난다()]라는 메서드에는 오리가 1초에 6번 날개짓을 하는 코드가 기록되있다고 합시다.
여기서 [좀더빨리나는오리]를 만들고자 [오리]클래스를 상속받았다고 합시다. 그럼 좀더빨리날려면 1초에 7번이상 날개를 퍼덕거려야 되겠죠 이때 [난다()]메서드를 오버라이드를 통해 재정의 하면서 1초에 7번 퍼덕이는 코드를 다시 적어주는겁니다. 이런게 오버라이드입니다. 상속받은 클래스에서 메서드를 바꿀 필요가 있을때 재정의 한다는 의미입니다.
또한가지 말씀드리면 보통 Activity 클래스를 상속받아쓰면 onCreate()를 상속해서 쓰게되는데 이때보면 항상 들어가는게 super.onCreate()입니다. 이게 무슨 의미가 있냐고 하면 기본적으로 액티비티가 생성될때 보이지 않게 여러가지 일을 합니다. 근데 액티비티를 단순히 상속받아 onCreate()를 재정의 해버리게되면 기본적으로 액비비티가 생성될때 눈에보이지않게 여러가지 일을 하는걸 백지상태로 만들어버리게 됩니다. 따라서 상위클래스의 onCreate()를 호출까지 해서 기본적인 할일에 더해서 내가 적어줄 코드를 적어주는형태가 되게되는겁니다.
추상클래스란 구현하지 않은 추상메소드를 담고있는 클래스를 말합니다.
즉 모든 메소드를 클래스 내에서 다 구현해버리시면 그 클래스를 상속받은 클래스에서는 다시 구현하지 않아도 (다시 구현해도 되구요) 됩니다. 구현하지 않은 추상메소드를 담은 클래스(이것이 추상클래스입니다)를 상속받는다면 반드시 상속받은 서브클래스에서 구현해야 합니다. "템플릿 메소드 패턴"을 검색해 보시면 활용 용도를 이해하실 수 있으실겁니다.
여럿 패턴 디자인 중에 비교적 난이도가 낮은 패턴이니 이해하실 겁니다
다른분들이 오버라이딩 개념 자체에 대해서는 설명을 잘 해주셔서 @override의 의미에 대해서만 말씀드리겠습니다.
@override는 컴파일러에게 정의하는 메소드가 오버라이딩을 목적으로 정의되었다는 사실을 알려줍니다.
@override를 적은 경우에는 오버라이딩만을 목적으로 정의하여야 하기 때문에, 상속받는 부모 클래스의 메소드와 다른 이름의
메소드를 정의할 경우 에러 메세지를 뱉습니다.
예를 들어서 부모 클래스의 helpme() 메소드를 오버라이드하는데 helpem()와 같이 오타를 냈을 경우 컴파일러가
'그건 니가 오버라이딩하려던 메소드가 아닌거 같은데'라는 메세지를 띄웁니다.
출처 : https://www.androidpub.com/104944
'앱개발' 카테고리의 다른 글
CGFloat 란? (0) | 2018.12.19 |
---|---|
인스턴스화 란? (1) | 2018.12.19 |
iOS Swift개발 - 변수,상수, 옵셔널 (0) | 2018.11.19 |
ATOM 문자셋 자동으로 설정하기 (0) | 2018.11.13 |
자바클래스의 이해 (0) | 2018.11.08 |