728x90
final variable
값을 변경할 수 없으며 멤버변수에 초기화 값이 없을 시 (blank final), 생성자를 통해 초기화해야한다.
final 변수 이름은 모두 대문자를 쓰는 것이 기본 코딩스타일이다. (공백이나 단어구분시 언더스코어 _ 사용)
public class Ex {
public static void main(String[] args) {
FinalVariable f = new FinalVariable();
// f.NUM1 = 10;
f.num2 = 20;
FinalVariable2 f2 = new FinalVariable2(100);
FinalVariable2 f3 = new FinalVariable2(9098);
System.out.println(f2.NUM1 + ", " + f2.NUM2);
System.out.println(f3.NUM1 + ", " + f3.NUM2);
}
}
class FinalVariable {
final int NUM1 = 10;
int num2 = 20;
public void setNum() {
// NUM1 = 99;
num2 = 99;
}
}
class FinalVariable2 {
final int NUM1 = 30;
final int NUM2;
public FinalVariable2(int nUM2) {
NUM2 = nUM2;
}
}
Output :
30, 100
30, 9098
final method
: 상속받은 메소드를 그대로 사용해야하며 오버라이딩이 금지된다
class FinalMethod {
public void normalMethod() {
}
public final void finalMethod() {
System.out.println("super class method");
}
}
class SubFinalMethod extends FinalMethod {
@Override
public void normalMethod() { }
// Cannot override the final method from FinalMethod
// public final void finalMethod() { }
}
final 클래스
: 클래스의 상속(is-a 관계)이 불가능하다.
final class FinalClass {
}
// The type subfinal cannot subclass the final class FinalClass
//class subfinal extends FinalClass {
//
//}
: 대신 포함관계 (has-a)는 가능
final class FinalClass {
public void method() {
}
}
class SubFinalClass {
FinalClass finalClass = new FinalClass();
public void method() {
finalClass.method();
}
}
상수(Constant)
불변의 값. static final 키워드를 붙여서 표현
static 키워드에 의해 클래스명만으로 접근이 가능하며 모든 인스턴스가 하나의 값을 공유
class Car {
private String company;
public static final String COMPANY_HYUNDAI = "HYUNDAI";
public String getCompany() {
return company;
}
public void setCompany(String company) {
this.company = company;
}
}
잘못된 값 입력확률을 줄이고 미리 정의된 값을 쉽게 가져다 쓸 수 있다.
public class Ex2 {
public static void main(String[] args) {
Car car = new Car();
car.setCompany(Car.COMPANY_HYUNDAI);
if(car.getCompany().equals(Car.COMPANY_HYUNDAI)) {
System.out.println("현대자동차");
}
}
}
상수는 생성자에서 초기화 될 수 없다. static은 인스턴스 생성전에 초기화되기 때문
'Study > Java' 카테고리의 다른 글
[JAVA] 이클립스 java.lang.ClassNotFoundException 오류 (0) | 2021.03.28 |
---|---|
[JAVA] 추상(abstract) (0) | 2021.03.09 |
[JAVA] 다형성 / 다이나믹 바인딩 (0) | 2021.03.08 |
JAVA - getter, setter (0) | 2021.02.09 |
JAVA - 파일 내 특정 문자열이 포함된 행을 제거 (0) | 2021.02.04 |