[안드로이드] 42. Java 필드 재정의(override)
만약 기반 클래스에 캡슐화한 멤버 필드와 같은 이름으로 파생 클래스에서 멤버 필드를 캡슐화하면 어떻게 될까요?
이 때도 기반 클래스에 캡슐화한 멤버 필드는 무효화하여 파생 형식에서는 직접적으로 사용할 수는 없습니다. 하지만 무효화한 메서드를 호출하여 사용하는 것처럼 super 키워드를 이용하면 무효화 멤버 필드를 사용할 수 있습니다.
실제 프로그래밍에서 메서드 재정의는 많은 곳에서 사용하지만 멤버 필드를 재정의는 개발자에게 혼돈만 가중시켜서 거의 사용하지 않습니다. 이에 관한 사항은 여러분께서 다양한 프로그래밍 과정을 통해 느끼고 판단할 수 있을 것입니다.
예를 들어 음악가의 멤버 필드에 음악가 이름을 name 멤버 필드로 캡슐화하고 음악가를 파생하는 피아니스트에서 피아니스트 이름을 name 멤버 필드를 재정의한다고 가정합시다. 이 때 피아니스트 개체에는 기반 형식부분인 음악가 이름도 있고 피아니스트 이름도 존재하는 꼴이 됩니다. 이는 개발 과정에서 혼란만 가중할 뿐입니다.
public class Musician { protected String name; public Musician(String name){ this.name = name; } public String getName(){ return name; } public void play(){ System.out.println(name+" 연주하다."); } }
|
public class Pianist extends Musician{ String name; public Pianist(String name,String mname){ super(mname); this.name = name; } @Override public void play(){ super.play(); System.out.println(super.name+", 피아니스트 "+name+" 딩동댕"); } } |
public class Program { public static void main(String[] args){ Pianist pianist = new Pianist(); pianist.play(); } } |
홍피아리스트 연주하다. 홍피아리스트, 피아니스트 홍길동 딩동댕 |
[소스]기반 형식의 멤버 필드를 파생 클래스에서 재정의한 예
관련 게시글
'프로그래밍 기술 > 안드로이드' 카테고리의 다른 글
[안드로이드] 44. Java 다형성 개요 (0) | 2016.05.16 |
---|---|
[안드로이드] 43. Java 접근 지정자 protected (0) | 2016.05.16 |
[안드로이드] 41. Java 메서드 재정의(override) (0) | 2016.05.16 |
[안드로이드] 40. Java super 키워드를 이용한 기반 형식부분 생성 (0) | 2016.05.16 |
[안드로이드] 39. OOP - 상속과 다형성 - 상속 개요 (0) | 2016.05.16 |
[안드로이드] 38. Java 정적 멤버와 static 키워드 (0) | 2016.05.16 |
[안드로이드] 37. Java 생성자 중복정의, this, this() (0) | 2016.05.16 |
[안드로이드] 36. Java 개체의 생과 사 (0) | 2016.04.17 |
[안드로이드] 35. Java 중복 정의(Overloading) (0) | 2016.04.17 |
[안드로이드] 34. Java 접근 지정자 (0) | 2016.04.17 |