목록이것이 자바다/07 상속 (15)
충분히 쌓여가는
protected는 같은 패키지에서는 default 처럼 접근이 가능하나, 다른 패키지에서는 자식 클래스만 접근을 허용한다 protected는 필드와 생성자 그리고 메소드 선언에 사용될 수 있다 !단 new 연산자를 사용해서 생성자를 직접 호출할 수는 없고, 자식 생성자에서 super()로 부모 생성자를 호출할 수 있다 예제 package ch07.sec06.pakcage1; public class A { protected String field; protected A() { } protected void method() { } } package ch07.sec06.pakcage2; import ch07.sec06.pakcage1.A; public class D extends A { public D() ..
final 클래스 : final 클래스는 부모 클래스가 될 수 없어 자식 클래스를 만들 수 없다 예로 String 클래스가 있다 public final class String {...} final 메소드 메소드를 선언할 때 final 키워드를 붙이면 오버라이딩 할 수 없는 메소드가 된다 즉 부모 클래스를 상속해서 자식 클래스를 선언할 때, 부모 클래스에 선언된 final 메소드는 자식 클래스에서 재정의할 수 없다 public final 리턴타입 메소드(매개변수, ...) {...}
메소드를 재정의하면, 부모 메소드는 숨겨지고 자식 메소드만 사용되기 떄문에 비록 부모 메소드의 일부만 변경된다 하더라도 중복된 내용을 자식 메소드도 가지고 있어야 한다 부모 메소드가 100줄의 코드를 가지고 있을 경우, 자식 메소드에서 1줄만 추가하고 싶더라도 100줄의 코드를 자식 메소드에서 다시 작성해야 한다 이 문제는 자식 메소드와 부모 메소드의 공동 작업 처리 기법을 이용하면 해결된다 자식 메소드 내에서 부모 메소드를 호출하는 것인데, super 키워드와 도트(.) 연산자를 사용하면 숨겨진 부모 메소드를 호출할 수 있다 class Parent() { public void method() { //작업 처리1 } } class Child extends Parent { @Override public v..
부모 클래스의 모든 메소드가 자식 클래스에게 맞게 설계되어 있다면 가장 이상적이지만, 어떤 메소드는 자식 클래스가 사용하기에 적합하지 않을 수 있다 이러한 메소드는 자식 클래스에서 재정의해서 사용해야 하고 이것을 오버라이딩이라 한다 메소드 오버라이딩 상속된 메소드를 자식 클래스에서 재정의하는 것을 말한다 메소드가 오버라이딩되었다면 해당 부모 메소드는 숨겨지고, 자식 메소드가 우선적으로 사용된다 메소드 오버라이딩 규칙 1. 부모 메소드의 선언부(return 타입, 메소드 이름, 매개변수)와 동일해야 한다 2. 접근 제한을 더 강하게 오버라이딩 할 수 없다(pulbic -> private으로 변경 불가능) 3. 새로운 예외를 throws 할 수 없다 @Override 개발자의 실수를 줄여주기 위해 정확히 오..