본문 바로가기
Language/JAVA

JAVA 6일차 - 제어자, 추상클래스, 추상메소드

by 코젼 2022. 6. 27.
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
반응형

댓글