코드 작성
package ex_final; public class Ex1 { public static void main(String[] args) { /* * final 키워드 * - 클래스, 메서드, 멤버변수에 지정 가능 * * 1) 멤버변수에 final이 붙을 경우 * - 기본 문법 : final 데이터타입 변수명; * - ex) 원주율 계산을 위한 파이(PI)값은 변경되면 안되므로 변수에 final 표기 * * 2) 메서드에 final이 붙을 경우 * - 기본 문법 : [접근제한자] final 리턴타입 메서드명([매개변수...) {} * * 3) 클래스에 final이 붙을 경우 * - 기본 문법 : [접근제한자] final class 클래스명 {} * - 어떤 클래스 자체로 이미 완전한 클래스 기능을 수행하는 경우 상속을 금지시킴 * ex) String 클래스, Math 클래스 등 * - final 메서드보다 더 광범위한 제한을 두도록 할 때 사용 * */ // final 멤버변수 FinalMemberVariable fmv = new FinalMemberVariable(); // 멤버변수 값 변경 fmv.normalVariable = 99; // fmv.finalVarialbe = 999; // 오류 발생! final로 선언된 멤버변수 값 변경 불가! System.out.println(fmv.normalVariable); System.out.println(fmv.finalVariable); // 상수값을 사용하는 것은 가능! // final 메서드 SubClassFinalMethod scfm = new SubClassFinalMethod(); scfm.normalMethod(); // 일반메서드 scfm.finalMethod(); // final 메서드 // => 부모의 finalMethod() 호출! // => final 메서드는 오버라이딩이 불가능할 뿐 사용하는 것은 가능! // final 클래스 FinalClass fc = new FinalClass(); // 인스턴스 생성 가능! } } // ----- final 멤버변수 ----- class FinalMemberVariable { int normalVariable = 10; final int finalVariable = 20; // final 멤버변수 = 상수 = 값 변경 불가 // => 변수에 접근하여 값을 사용할 수는 있으나, 값을 변경할 수는 없다! final int finalVariable2; // 에러 발생! final 멤버변수는 초기화가 동시에 선언! // => 만약, 변수 선언 시 초기화를 안할 경우 생성자에서 초기화 가능! public FinalMemberVariable() { finalVariable2 = 30; // final 멤버변수 초기화를 생략 시 컴파일 에러 발생! } } // ----- final 메서드 ----- class FinalMethod { // 일반 메서드 public void normalMethod() { System.out.println("FinalMethod의 normalMethod()"); } // final 메서드 public final void finalMethod() { System.out.println("FinalMethod의 finalMethod()"); } } class SubClassFinalMethod extends FinalMethod { @Override public void normalMethod() { System.out.println("서브클래스에서 오버라이딩 된 normalMethod()"); // final 메서드를 호출하는 것은 가능! finalMethod(); } // @Override // public void finalMethod() { // // 오류 발생! final 메서드는 서브클래스에서 오버라이딩 불가! // // } } // SubClassFinalMethod 클래스 끝 // ----- final 클래스 ----- final class FinalClass {} //class SubClassFinalClass extends FinalClass { // // 오류 발생! final 클래스는 상속 불가! // //} class OtherClass { // final 클래스는 상속(is-a관계)은 불가능하나 // 포함(has-a)은 가능! FinalClass fc = new FinalClass(); // 인스턴스 생성을 통한 접근은 가능! } // final 클래스의 대표적인 예 : String 클래스 //class OtherClass2 extends String {} // 상속 불가!
final에 대한 정의와 예시
출력 결과
99
20
서브클래스에서 오버라이딩 된 normalMethod()
FinalMethod의 finalMethod()
FinalMethod의 finalMethod()
나의 소감
final이 클래스에 붙으면 상속 불가!
final이 메서드나 변수에 붙으면 호출은 가능 BUT 초기화,오버라이딩은 불가능!
예를들면 시험칠때 제출한 답안지 같은 느낌!
나중에 확인은 가능하지만 수정은 못함!
'JAVA' 카테고리의 다른 글
인터페이스(Interface) | 22/01/03 (0) | 2022.01.11 |
---|---|
상수 | 22/01/03 (0) | 2022.01.11 |
싱글톤(Singleton) 활용 | 21/12/30 (0) | 2022.01.11 |
상속(Polymorphism) 활용 | 21/12/30 (0) | 2022.01.11 |
싱글톤(Singleton) 디자인 패턴 | 21/12/29 (0) | 2022.01.11 |