가자미의 개발이야기
자바 스태틱(클래스변수(메소드))와 상속 클래스의 주의점 본문
a. 스태틱의 상속
부모 클래스에 static 변수 혹은 메소드가 있다면 상속받은 클래스에도 상속 될까?
답은 아니오이다.
다만! 부모 클래스가 static에 직접 접근 가능한 권한은 상속된다.
b. 상속 주의사항
누군가가 핸드폰을 샀다고 가정하자. 그 사람은 기계치라 전화 문자만 사용할 수 있다.
이 사람은 스마트폰을 가져도 기본적인 핸드폰 기능만 사용할 수 있다.
자식 클래스의 기능을 사용하고 싶으면 자식 클래스로 접근해야 가능하다.
부모 클래스로 접근하면 부모 클래스의 기능만 사용할 수 있다. (같은 주소를 참조하지만, 활용하는 영역의 차이)
참조를 부모 클래스로 하느냐 자식 클래스로 하느냐에 따라 기능의 한계가 발생할 수 있다.
class HandPhone{}
class SmartPhone extends HandPhone{}
HandPhone hp = new SmartPhone(); //가능
new SmartPhone sp= new Handphone(); //불가능
부모 참조변수로 자식 클래스 참조가 가능하지만 자식 참조변수로 부모 클래스 참조는 불가능하다.
쉽게 말해 핸드폰 달라고 해서 스마트폰을 줄 순 있지만, 스마트폰 달라고 했는데 핸드폰 주는건 문제가 생긴다.
왜냐면 핸드폰으로 문자 전화해야 할 때 스마트폰을 써도 큰 문제는 없지만, 스마트폰으로 카톡, 유튜브를 봐야하는데 핸드폰으로는 할 수 없지 않은가!
여기서 한가지 더 나아가
//가능
SmartPhone sp = new SmartPhone();
HandPhone hp = sp;
//불가능
HandPhone hp = new SmartPhone();
SmartPhone sp = hp;
왜나면 자바는 한줄씩 읽어들여서 이전의 일을 모른다.
즉 hp가 어떤 것을 가르키는지 모른다. 그냥 이것이 Handphone 인스턴스임만 알 뿐이다.
그래서 에러를 일으킨다.
생성자 오버로딩을 활용한 상속
'Java > 자바 기본 문법' 카테고리의 다른 글
자바 instance of 연산자 (0) | 2021.01.07 |
---|---|
자바 메소드 오버라이딩 (0) | 2021.01.07 |
자바의 포함, 상속, 상속 생성자 (0) | 2021.01.07 |
자바의 배열 (0) | 2021.01.07 |
자바 콘솔 입출력 (0) | 2021.01.07 |