2023_1_14_TIL
final 변수
- 필드, 지역변수, 메소드, 클래스 앞에 위치
- 한번 대입된 값이 최종 값 -> 절대 수정 못함
- final 변수는 언제 많이 사용
- 이벤트 처리할 때 메모리에서는 사라진 그 변수를 나중에 사용해야 할 떄가 있다
- 사라지지 않는 영역인 상수 영역에 복사해 놓는 것
class A1 {
int a = 3;
final int b = 5;
A1() {
}
}
class A2 {
int a;
final int b;
A2() {
a = 3;
b = 5;
}
}
class A3 {
int a = 3;
final int b = 5;
A3() {
a = 5;
}
}
class B {
void bcd() {
int a = 3;
final int b = 5;
a = 7;
}
}
public class FinalModifier_1 {
public static void main(String[] args) {
A1 a1 = new A1();
A2 a2 = new A2();
a1.a = 7;
a2.a = 7;
}
}
final메소드와 final클래스
- final메소드 -> 오버라이딩 절대X
- final클래스 -> 상속 X
class A {
void abc(){}
final void bcd(){}
}
class B extends A {
void abc(){}
}
final class C {}
public class FinalModifier_2 {
public static void main(String[] args) {
}
}
abstract 제어자의 장점
class Animal {
void cry(){}
}
class Cat extends Animal {
void cry() {
System.out.println("야옹");
}
}
class Dog extends Animal {
void cry() {
System.out.println("멍멍");
}
}
public class AbstractModifier_1 {
public static void main(String[] args) {
Animal animal1 = new Cat();
Animal animal2 = new Dog();
animal1.cry();
animal2.cry();
}
}
- 추상메소드를 1개 이상 포함하고 있는 클래스는 반드시 추상 클래스로 정의
abstract class Animal {
abstract void cry();
}
class Cat extends Animal {
@Override
void cry() {
System.out.println("야옹");
}
}
class Dog extends Animal {
@Override
void cry() {
System.out.println("멍멍");
}
}
public class AbstractModifier_2 {
public static void main(String[] args) {
Animal animal1 = new Cat();
Animal animal2 = new Dog();
animal1.cry();
animal2.cry();
}
}
참조