[Java] final, abstract 추상 클래스, interface 인터페이스

클라우드·2024년 4월 3일
0

Java

목록 보기
7/20
post-thumbnail

13. final keyword

  • field 앞에 final이 올 경우 : 해당 field의 값을 변경할 수 없다. (상수로 사용)
  • method 앞에 final이 올 경우 : 하위 class에서 해당 method를 overriding 할 수 없다.
  • class 앞에 final이 올 경우 : 해당 class를 아예 상속할 수 없다.

14. abstract class(추상 클래스)

  • abstract method를 1개 이상을 보유하고 있는 class는 반드시 abstract class로 지정해야 한다.
  • 가장 큰 특징은 아직 완성되지 않은 class이기 때문에 instance 생성이 안된다.
  • 사용 방법 : 추상 클래스를 상속받는 하위 클래스를 만들어서 추상 method를 overriding해서 사용하면 된다.
  • 재활용성의 폭이 넓혀진다.
package test;

// class 안에 추상 메소드가 있으면 추상 클래스다.
public abstract class TestA {
    // field
    private int age;
    private String name;

    // constructor
    public TestA() {
    }

    // constructor overloading
    public TestA(int age, String name) {
        super();
        this.age = age;
        this.name = name;
    }

    // method
    public void myFunc() {
        // method를 정의했다.
    }

    // 추상 (abstract method)
    public abstract void sayHello(); // method를 선언했다.

}

class MySubClass extends TestA {
    @Override
    public void sayHello() {

    }
}

15. interface(인터페이스)

  • class와 유사함. class의 아주 특별한 형태
  • interface는 class 대용으로 사용한다. (특수한 경우)
  • interface 안에 method가 있을 수 있다. (추상 method만 나올 수 있다.)
  • 그렇기 때문에 일반적으로 public abstract는 생략해서 구현한다.
  • interface 안에 field도 나올 수 있다. (상수만 사용할 수 있다.)
  • 특성 상 당연히 public static으로 잡혀야 하며, 상수로 만들어야 해서 final을 사용한다.
  • 그래서 public static final은 생략이 가능하다.
  • 하위 클래스에서 상위 클래스를 ~~ 한다.
    • 클래스 - 상속 / 인터페이스 - 구현
  • 하위 class에서 interface를 구현해서 사용하면 된다.
  • 하나의 인터페이스를 확장된 인터페이스를 만들려면 extends를 쓴다.
  • 하나의 인터페이스를 구현하려면 implements를 쓴다.
  • class의 확장과 다르게 interface는 다중 구현이 가능하다.
  • is-a relation 관계가 당연히 성립한다.
package test;

public interface MyInterface {

    // field
    int MY_NUM = 100;
    // public static final int MY_NUM = 100;
    // 모든 field에 public, static, final 이 다 붙어야 해서 생략 가능

    // method
    // public abstract void myFunc();
    void myFunc();
    // 인터페이스에는 모든 메소드에 abstract이 다 붙어야 해서 생략 가능
    // 즉, 추상 메소드만 넣을 수 있다.
    // method는 선언만 한다.
}

// MyClass1 부분과 MyInterface 부분이 같으면 extends
// MyClass1 부분과 MyInterface 부분이 다르면 implements
// 콤마찍고 인터페이스(MyInterface 부분) 여러 개 동시 구현 가능
class MyClass1 implements MyInterface {
    @Override
    public void myFunc() {
    }
}
profile
안녕하세요 :)

0개의 댓글