728x90
반응형
💡제어자
제어자(modifier)
- 클래스, 변수, 메소드의 선언부에 사용되어 부가적인 의미를 부여한다.
- 제어자는 접근 제어자와 그 외의 제어자로 나뉜다.
접근 제어자 public protected default private 그 외 static final abstract native transient synchronized volatile strictfp
제어자 같은 클래스 같은 패키지 자손클래스 전체 public protected default private
💡static 제어자
static - 클래스의, 공통적인
- static이 사용될 수 있는 곳 - 멤버변수, 메소드, 초기화 블록
[ 멤버변수 ]
- 클래스 변수가 된다.
- 인스턴스를 생성하지 않고도 사용 가능하다.
- 클래스가 메모리에 로드될 때 생성된다.
[ 메소드 ]
- 인스턴스를 생성하지 않고도 호출이 가능한 static 메소드가 된다.
- static 메소드 내에서는 인스턴스멤버들을 직접 사용할 수 없다.class StaticTest { static int width = 200; static int height = 120; static { // 클래스 초기화 블록 // static변수의 복잡한 초기화 수행 } static int max(int a, int b) { return a > b ? a : b; } }
💡fianl 제어자
- final이 사용될 수 있는 곳 - 클래스, 메소드, 멤버변수, 지역변수
final - 마지막의 , 변경될 수 없는
[ 클래스 ]
- 변경될 수 없고 확장될 수 없다. --> 다른 클래스의 조상이 될 수 없다.
[ 메소드 ]
- 변경될 수 없고 오버라이딩을 통해 재정의 될 수 없다.
[ 멤버변수, 지역변수 ]
- 상수가 된다.
fianl class FinalTest { final int MAX_SIZE = 10; // 멤버변수 final void getMaxSize() { final LV = MAX_SIZE; // 지역변수 return MAX_SIZE; } } class Child extends FinalText { void getMaxSize() {} /// 오버라이딩 불가능 }
💡abstract
abstract - 추상의, 미완성의
- abstract가 사용될 수 있는 곳 - 클래스, 메소드
[ 클래스 ]
- 클래스 내에 추상메소드가 선언되어 있음을 의미한다.
[ 메소드 ]
- 선언부만 작성하고 구현부는 작성하지 않은 추상메소드임을 알린다.
abstract class AbstractTest { // 추상클래스 abstract void move(); // 추상메소드 }
💡final 제어자
* fianl 제어자
📃final 예제
// public fianl class Point --> 자식 클래스를 만들 수 없어서 Point3D에서 오류가 난다.
public class Point {
int x;
int y;
Point(int x, int y){
this.x = x;
this.y = y;
}
// fianl String getLocation() --> Point3D에서 오버라이딩 할 수 없다.
String getLocation() {
return "x: " + x + ", y: " + y;
}
}
class Point3D extends Point{
// final int z; --> setZ()로 값을 재정의 할 수 없다.
int z;
Point3D(int x, int y, int z) {
super(x, y);
this.z = z;
}
void setZ(int z) {
this.z = z;
}
@Override
String getLocation() {
// TODO Auto-generated method stub
return super.getLocation() + ", z: " + z;
}
}
💡abstract
abstract - 추상의, 미완성의
abstract가 사용될 수 있는 곳 - 클래스, 메소드
📃abstract 예제
package test;
public class ButtonTest {
public static void main(String[] args) {
Button_OK btn1 = new Button_OK();
Button_Cancel btn2 = new Button_Cancel();
btn1.onClick();
btn2.onClick();
}
}
abstract class Button {
int w; int h;
String text;
// 추상메소드(abstract) -- 구현부가 없음.
abstract void onClick();
}
class Button_OK extends Button {
// 추상클래스를 상속받는 자손클래스는 반드시 추상클래스 내에서 사용하는 추상메서드를 사용해야한다.
@Override
void onClick() {
System.out.println("OK 눌림");
}
}
class Button_Cancel extends Button {
@Override
void onClick() {
System.out.println("Cancel 눌림");
}
}
728x90
반응형
'Language > JAVA' 카테고리의 다른 글
JAVA 7일차 - 접근 제어자, 다형성 (0) | 2022.06.28 |
---|---|
JAVA 6일차 - 오버로딩, 오버라이딩, 상속 예제 (0) | 2022.06.27 |
JAVA 6일차 - 패키지, import문 선언 (0) | 2022.06.27 |
JAVA 6일차 - toString 메소드, 상속 예제 연습 (0) | 2022.06.27 |
JAVA의 정석 3판 - 두 점 사이 거리 계산 (0) | 2022.06.26 |
댓글