:: 게시판
:: 이전 게시판
|
이전 질문 게시판은 새 글 쓰기를 막았습니다. [질문 게시판]을 이용바랍니다.
통합규정 1.3 이용안내 인용"Pgr은 '명문화된 삭제규정'이 반드시 필요하지 않은 분을 환영합니다.법 없이도 사는 사람, 남에게 상처를 주지 않으면서 같이 이야기 나눌 수 있는 분이면 좋겠습니다."
12/05/09 18:02
저도 헷갈리게 만들어 주시네요.
우선 변수도 상속받을 수 있나요? case 2: When you override a member variable in a child class (actually its hiding, not overriding), which version of that variable will be called depends on the reference, the object, unlike method lookup. In your sample code, variable a and b are not actually member variable, they are class variable since static. Lets change the sample code a bit, making the 'a' in class 'A' public and adding some test code in main. 출처 : http://kldp.org/node/110902 그리고 메서드 상속에 대해서는 당연하다고 생각했습니다. 제가 이해한 이유는 상속이라는 것이 확장의 개념이라고 이해했습니다 부모의 기본적인 기능을 하고, 내 입맛에 맞는 기능을 추가하는 오버라이딩이 주 목적이라고 봤고, 그럼, 당연히 메서드 상속은 부모의 기본적인 기능이 할 수 있도록 접근권한이 같거나 기능을 추가하는 오버라이딩이 들어가게되면 접근권한이 커질 수 있다고 생각했습니다. 우선 이글을 한 번 보시길 바랍니다. 오버라이딩과 오버로딩부분을.. http://babcider.tistory.com/54 음 추가적으로 문법적으로 안맞아서 그런거 같습니다. A.methodA() 클래스 A가 있고, 그 안에 methodA가 있습니다. 클래스 B에서 A를 상속하고 methodA()를 오버라이딩한다고 치면, 기본적으로 super.methodA()가 동작해야합니다. 하지만 A.methodA()는 public인데, B.methodA()는 private이면 문법상 맞지 않다고 생각합니다.
12/05/09 18:13
변수는 상속 안됩니다.
메소드는 클래스가 수퍼클래스로 캐스팅되었을 때에도 권한의 문제 없이 호출되어야 하기 때문에 권한을 줄이면 안됩니다.
12/05/09 23:06
접근제한자가 넓어지는 이유는 당연합니다.
객체지향의 4대 특징중, 상속(Inheritance)이라는 개념을 사용할 때, 자바에서는 extends 키워드를 씁니다. 클래스를 확장해서 하나 더 만든다는 것이죠. public 을 private 으로 바꾸는건 확장이 아니라 축소 입니다. 그리고 객체지향 특징, 원칙 상 (Java 역시 이에 따라 다형성을 지원하고 있고) 슈퍼클래스를 통해 사용한 기능은 이를 상속한 클래스에서도 당연히 되어야 합니다. 예를 들면 이런거죠. Alphabet a = new Alphabet(); a.doSomething(); 이라는 코드가 있다고 합니다. 그리고, Alphabet 을 상속받은 클래스 Alpha 와 Beta 가 있다고 칩시다. 그러면, Alphabet a = new Alphabet(); 이 부분을 Alphabet a = new Alpha(); 혹은 Alphabet a = new Beta(); 로 변환해도 아래쪽의 a.doSomething(); 이라는 코드는 잘 돌아가야 한다는 뜻이 됩니다. 만약에 Alphabet 의 doSomething() 메소드는 public 이었는데, Alpha 나 Beta 클래스에서 이를 private 으로 바꾸는 것이 가능하다면 다형성에 기반한 코딩을 안정적으로 지원하지 못하게 됩니다. 잘 동작해야 한다는 의미는, 치환해도 컴파일 상 오류가 없다는 뜻 정도로 받아들이면 됩니다. 객체지향의 4대 특징과 5대 원칙에 대해서 심도있게 찾아보시기 바랍니다. ^^;
|