package kr.s19.object.finaltest;
class A{
//멤버 필드
final int NUM = 10; //상수
//상수는 일반적으로 대문자로 많이 사용한다.~~!~!~!~!~!~~!~!~!!~
public static final int NUMBER = 20; //static이기 때문에 객체 생성 없이 호출가능
// 스태틱을 사용한 상수를 주로 가장 많이 사용한다.
}
public class FinalMain01 {
public static void main(String[] args) {
A ap = new A();
//ap.NUM = 20; //상수는 변경이 불가능하기에 에러가 발생한다.
System.out.println(ap.NUM);
//static 상수 호출
System.out.println(A.NUMBER);//static이기 때문에 객체 생성 없이 호출가능
final int NO =30;
System.out.println(NO);
}
}
10
20
30
package kr.s19.object.finaltest;
class Me{
int var = 100;
//메서드에 final를 지정하면 자식클래스에서 메서드 오버라이딩이 불가능
public final void setVar(int var) {
this.var = var;
}
}
public class FinalMain02 extends Me{
//부모클래스의 final 메서드는 재정의 불가
/*
* @Override
public void setVar(int var) { //오류내용:final이라 안된단다.~!~!
~!~!~!
System.out.println(var);
}
*/
public static void main(String[] args) {
FinalMain02 fm = new FinalMain02();
fm.setVar(500);
System.out.println(fm.var); //fanal을 했어도 결과는 변경됨.
}
}
500
package kr.s19.object.finaltest;
//class에 final을 붙임.
//class에 final을 명시하면 상속 불가능
final class Me1{
int var;
public void setVar(int var) {
this.var = var;
}
}
//public class FinalMain03 extends Me1 { //상속이 불가능해서 Me1 부분에 에러가 난다.
public class FinalMain03{
public static void main(String[] args) {
FinalMain03 fm = new FinalMain03();
//fm.setVar(1000); //이역시 상속이 불가능하여 에러가난다.
}
}