Programming/JAVA

[JAVA] 다형성(2) / 추상클래스 / 관련 예제

Jayna. 2023. 12. 27. 16:50
728x90

 

추상클래스

접근제한자 abstract class 클래스명{ }

 => abstract : 예약어 -> 추상클래스, 추상메소드 선언할 때 붙임.

 

>> 추상 메소드가 존재하는 순간 추상 클래스로 정의됨

abstract 라는 예약어를 사용해서 정의 해야함.

객체 생성이 불가능하다. 부모클래스 구실은 가능(다형성 적용 가능)

 

추상클래스 == 추상메소드 + 일반필드 + 일반메소드

  => 추상메소드가 없어도 추상클래스로 정의 가능  => 개발자의 역량

 

public abstract class Sports {
    private int people;

    public Sports() {}

    public Sports(int people) {
    this.people = people;
    }

    public int getPeople() {
    return people;
    }

    public void setPeople(int people) {
    this.people = people;
    }

    @Override
    public String toString() {
    return "people : " + people;
    }
}

 

728x90

추상 메소드

접근제한자 abstract 반환형 메소드명();

 

public class VolleyBall extends Sports{
    @Override
    public void rule() {
    System.out.println("네트에 몸이 닿으면 안됨");
    }
}


====================================================


public class Soccer extends Sports {
    // 미완성된 클래스 == 추상클래스를 상속받게 되면
    // 부모 클래스에 있는 추상메소드를 "강제로" 오버라이딩을 "반드시" 해줘야 함
    @Override
    public void rule() {
    System.out.println("손으로 공을 만지면 안됨");
    }
}


=====================================================


public class BasicRun {
    public static void main(String[] args) {

        // 추상클래스로 객체 생성 불가
        // 클래스가 미완성되었기 때문
        //Sports s = new Sports();

        // Sports s;   //객체 생성 X, 참조형 변수로 사용 O
        // s = new Soccer();

        Sports s = new Soccer();  
        // 다형성을 이용하여 자식 객체를 받아주는 용도로 사용 가능

        // 객체 배열
        Sports[] arr = new Sports[2];
        	arr[0] = new Soccer();
        	arr[1] = new VolleyBall();

        for(int i =0; i<arr.length;i++) {
        	arr[i].rule();
        }

        // 추상메소드를 사용할 경우
        // 메소드 사용의 통일성을 확보할 수 있다.
        // 표준화된 틀을 제공 => 상속을 받은 자식클래스의 경우 반드시 미완성 메소드를 완성시켜야 함.
    }
}
728x90