초급JAVA 12 - 접근제어자, 추상클래스, 인터페이스

voilà!·2021년 11월 7일
0

초급JAVA

목록 보기
23/24

접근제어자

  • public : 접근제한이 없음 -> 다른 패키지에서도 접근 가능
  • protected : 같은 패키지 + 상속받은 클래스에서 접근 가능
  • default : 같은 패키지에서만 접근 가능
  • private : 클래스 내에서만 접근 가능
public void publicMethod(){
		System.out.println(publicVar);
	}
    
	protected void protectedMethod(){
		System.out.println(protectedVar);
	}
    
	void defaultMethod(){
		System.out.println(defaultVar);
	}
    
	private void privateMathod(){
		System.out.println(privateVar);
	}
    
public static void main(String[] args) {
		AccessModifier am = new AccessModifier();
		
		System.out.println(am.publicVar);
		am.publicMethod();
		
		System.out.println(am.protectedVar);
		am.protectedMethod();
		
		System.out.println(am.defaultVar);
		am.defaultMethod();
		
		System.out.println(am.privateVar);
		am.privateMathod();
		    

접근제어자를 사용하는 이유

  • 데이터를 보호하기 위해
  • 사용하는데 불필요한 멤버를 숨기기 위해

Time 클래스

package g_oop2;

public class Time {
	
	private int hour; 
	private int minute;
	private int second;
	
	
	public int getHour() { //getter 어떤 변수의 값을 얻기 위해 사용
		return hour;
	}

	public void setHour(int hour) { //setter 변수에 값을 저장할 때 사용(값을 받을 파라미터도 있음!)
		if(hour < 0){
			this.hour = 0;
		}else if(23 < hour){
			this.hour = 0;
		}else{
			this.hour = hour;
		}
	}

	public int getMinute() {
		return minute;
	}

	public void setMinute(int minute) {
		if(minute < 0){
			this.minute = 0;
		}else if(59 < minute){
			this.minute = 0;
			setHour(hour+1);
		}else{
			this.minute = minute;
		}
	}

	public int getSecond() {
		return second;
	}

	public void setSecond(int second) {
		if(second < 0){
			this.second = 0;
		}else if(59 < second){
			this.second = 0;
			setMinute(minute+1);
		}else{
			this.second = second;
		}
	}
	
	void clock(){
		while(true){
			System.out.println(toString());
			stop();
			setSecond(second+1);
		}
	}
	
	private void stop(){ //clock을 구현하기 위해 부수적으로 만든 메서드
		try {
			Thread.sleep(1000); //프로그램을 잠시동안 멈출 수 있게 하는 메서드
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} 
	}
	
	

	@Override  // 상속받은 메서드 내용 변경
	public String toString() { //Object 클래스의 toString 메서드 상속받음
		return hour + ":" + minute + ":" + second;
	}
}

추상클래스

  • 추상메서드를 가지고 있는 클래스는 abstract 붙여서 추상클래스로 만든다.
  • 추상클래스는 내용이 없으므로 부모클래스로만 가능하다.

추상메서드

  • 선언부만 있고 구현부가 없는 메서드

public abstract class SampleAbstractParent {
void method(){
System.out.println("내용");
}
abstract void abstractMethod();
}

  • 추상클래스를 상속받은 자식클래스는 오버라이딩해서 내용을 만들어 줘야 한다.

    class SampleAbstractChild extends SampleAbstractParent {
    @Override
    void abstractMethod() {
    System.out.println("내용");
    }
    }

Animal 클래스에 동물소리를 내는 메서드 만들기
(메서드를 선언부만 만들고, 동물 이름은 지정한 클래스들에 상속한다.)

public abstract class Animal {
	
	abstract void sound();
	
}

class Dog extends Animal {

	@Override
	void sound() {
		System.out.println("멍멍!!");
	}
}
class Cat extends Animal {

	@Override
	void sound() {
		System.out.println("야옹!!!");
	}
}
class Tiger extends Animal {

	@Override
	void sound() {
		System.out.println("어흥!!!!");	
	}
}

인터페이스

  • 클래스와 같은 하나의 데이터

  • 클래스는 세부 내용이 있지만, 인터페이스는 틀만 존재

  • 상수랑 추상메서드만 존재하고 일반적인 변수와 메서드는 넣을 수 없다. (상수 : 값을 변경할 수 없는 변수)

  • 인터페이스의 모든 멤버변수는 public static final 제어자를 사용해야 한다.

    public static final int NUM1 = 1;

  • 변수앞에 final을 붙이면 상수가 되고, 변수의 값을 변경하지 못하게 만든다.

  • 상수의 이름은 전부 대문자를 사용한다.

  • 모든 멤버변수의 제어자가 같기 때문에 생략이 가능하다.

    int NUM2 = 2;

  • 인터페이스의 모든 메서드는 public abstract 제어자를 사용해야 한다.

    public abstract void method1();

  • 모든 메서드의 제어자가 같기 때문에 생략이 가능하다.

    void method2();

  • 인터페이스 상속받는 클래스 : 클래스명 implements 인터페이스명
  • 하나의 클래스가 여러개의 인터페이스를 상속받을 수 있다.
 class SampleImplement implements SampleInterface, SampleInterface2 { 
	
	@Override
	public void method1() {
		
		
	}

	@Override
	public void method2() {
		
		
	}

	@Override
	public void method3() {

		
	} 
	
}

interface SampleInterface2{
	void method1();
	void method3();

}

0개의 댓글

관련 채용 정보