본문 바로가기
Skill Stacks/Java

19. Java 클래스 (추상 클래스, 인터페이스)

by JayAlex07 2023. 6. 5.

19. Java 클래스 (추상 클래스, 인터페이스)

 

추상 클래스

추상화 클래스는 객체를 만들 수 없다

public abstract class PlayerMovement{
    abstract void kick();
}

public class Player extends PlayerMovement{
    public void kick() {
        System.out.println("Kick");
    }
}

어떠한 특정 행동을 해도, 사람마다 다 다르게 행동한다

  • 공부를 할 때에, 계획을 먼저 세운다음 공부를 하는 사람이 있고
  • 그냥 공부하는 사람이 있고
  • 노래를 들으면서 공부하는 사람과, 그렇지 않은 사람들이 있다

 

위처럼, 큰 틀에서는 같은 행동을 하지만, 자세한 부분에서 차이점이 있으면, 추상화를 통해 큰 틀을 만들고, 그 클을 자식 클래스에 상속 시키면 된다


 

 

인터페이스

추상 클래스와 매우 흡사하다

GameControl 인터페이스를 가지고 오고, ShootingGame() 의 클래스의 객체를 만들었다

  • 인터페이스는 같은, 다른 클래스를 가지고 와도 된다

인터페이스 안에 인터페이스를 상속할 수 있다

  • 상속된 인터페이스가 있을 때에, 특정 인터페이스를 사용하고 싶으면, 추상 클래스를 따로 만들어서, 인터페이스를 상속받아 사용하면 된다

 

클래스 마다 같은 기능을 하나의 인터페이스로 모아둔다

  • 그 기능들을 모두 필요할 때에 implements를 사용해서, 기능을 가지고 와야 한다
  • 여기서 인터페이스를 넣을 클래스에서 가져오는 인터페이스에 대한 모든 기능들을 정의해야 한다
    • 안 하면 에러가 뜬다
public interface Player {
    public void shoot();
}

public abstract class AllPlayer {
    public int num;
    public String club;

    public AllPlayer(int num, String club) {
        this.num = num;
        this.club = club;
    }

    public abstract void play();

    public abstract void steal();
}

public class footballPlayer extends AllPlayer implements Player{

    public String name;

    public footballPlayer(int num, String club, String name) {
        super(num, club);
        this.name = name;
    }

    public void play() {
        System.out.println("Play Football");
    }

    @Override
    public void steal() {
        System.out.println(name + " went for slide tackle");
    }


    @Override
    public void shoot() {
        System.out.println(name + " shoots with his feet");
    }
}

public class basketballPlayer extends AllPlayer implements Player{

    public String name;
    public basketballPlayer(int num, String club, String name) {
        super(num, club);
        this.name = name;
    }

    public void play() {
        System.out.println("Play Basketball");
    }

    @Override
    public void steal() {
        System.out.println(name + " went for slide tackle");
    }


    @Override
    public void shoot() {
        System.out.println(name + " shoots with his feet");
    }
}

 

 

자바 인터페이스 vs 추상 클래스

 

인터페이스는 변수/ 속성을 가질 수 없다

 

인터페이스는 모두 public 이다, private일 수 없다

 

추상 클래스는, 2개의 추상 클래스를 상속 받을 수 없다 / 반대로 인터페이스는 한번에 다중 상속이 가능하다

'Skill Stacks > Java' 카테고리의 다른 글

[TIL] Java (random number)  (0) 2023.06.07
[TIL] Java (String.format())  (0) 2023.06.06
18. Java 클래스 (속성)  (0) 2023.06.02
17. Java Array, ArrayList  (0) 2023.05.31
16. Java Array  (4) 2023.05.29