1.  final 클래스와 final 메소드

1)  final 클래스

public final class 클래스 { ... }

 

🚀  클래스를 선언할 때 final 키워드를 class 앞에 붙이면 최종적인 클래스이므로 더 이상 상속할 수 없는 클래스가 됨

 

 

2)  final 메소드 

public final 리턴타입 메소드( 매개변수, ...) { ... }

 

🚀  메소드를 선언할 때 final 키워드를 붙이면 이 메소드는 최종적인 메소드이므로 오버라이딩할 수 없는 메소드가 됨

 

 


2.  protected 접근 제한자

 

🚀  같은 패키지에서는 default처럼 접근이 가능하나, 다른 패키지에서는 자식 클래스만 접근을 허용

package package1;

public class A {
	//필드 선언
	protected String field;

	//생성자 선언
	protected A() {
	}

	//메소드 선언
	protected void method() {
	}
}

 

같은 패키지
package package1;

public class B {
	//메소드 선언
	public void method() {
		A a = new A();		//o
		a.field = "value"; 	//o
		a.method(); 			//o
	}
}

 

다른 패키지
package package2;

import package1.A;

public class C {
	//메소드 선언
	public void method() {
		//A a = new A();		//x
		//a.field = "value"; 		//x
		//a.method(); 			//x
	}
}

 

다른 패키지 & 자식 클래스
package package2;

import package1.A;

public class D extends A {
	//생성자 선언
	public D() {
		//A() 생성자 호출
		super();				//o
	}
	
	//메소드 선언
	public void method1() {
		//A 필드값 변경
		this.field = "value"; 	//o
		//A 메소드 호출
		this.method(); 			//o
	}
	
	//메소드 선언
	public void method2() {
		//A a = new A();		//x
		//a.field = "value"; 	//x
		//a.method(); 			//x
	}	
}

 

  ⚡️  new 연산자를 사용해서 생성자를 직접 호출할 수는 없고, 자식 생성자에서 super()로 A 생성자를 호출할 수 있다.

 

 

 

 

 

* 내용 참고 : 책 '이것이 자바다'

'Programming Language > JAVA' 카테고리의 다른 글

[Java] 다형성  (0) 2024.08.24
[Java] 타입 변환  (0) 2024.08.24
[Java] 오버라이딩 Overriding  (0) 2024.08.11
[Java] 상속 Inheritance  (0) 2024.08.11
[Java] Getter와 Setter · 싱글톤 패턴  (0) 2024.08.11

+ Recent posts