728x90

추상 클래스
추상 클래스(abstract class)란 하나 이상의 추상 메소드(abstract method)를 포함하는 클래스이다.
- 추상 메소드는 선언만 있고 구현이 없는 메서드이며 선언부에 'abstract' 라는 키워드를 붙인다.
- 추상 메소드가 포함되었다면 클래스도 추상 클래스이므로 클래스명 앞에도 'abstract' 키워드를 붙여야 한다.
- 추상 클래스는 추상 메서드를 포함하고 객체화 할 수 없다는 점만 제외하고 일반 클래스와 다르지 않으며 생성자, 멤버변수와 일반 메서드를 가질 수 있다.
- 추상 클래스는 다른 클래스들에게서 공통으로 가져야하는 메소드들의 원형을 정의하고 그것을 상속받아서 구현토록 하는데 사용된다.
- 해당 추상클래스를 상속받는 자식 클래스들은 반드시 추상메서드를 상속받아 재정의(오버라이딩)해야 한다.


public abstract class 클래스명 {
  필드
  생성자
  메서드
  추상메서드
}


package ex_abstract;

public abstract class Animal {
    // 추상 클래스(abstract class)란 하나 이상의 추상 메소드(abstract method)를 포함하는 클래스
    // 추상 메소드가 포함되었다면 클래스도 추상 클래스이므로 클래스명 앞에도 'abstract' 키워드를 붙여야 한다.
    public String aType;
    public void move() {
        System.out.println("동물이 어슬렁 어슬렁 움직인다.");
    }
    abstract void sound(); // 추상(abstract) 메서드는 선언만 있고 구현이 없는 메서드
}

package ex_abstract;

public class Dog extends Animal {
    public void move() {
        System.out.println("노곤하개");
    }
   
    @Override
    void sound() {

        // 추상클래스를 상속받는 자식 클래스들은 반드시 추상메서드를 상속받아 재정의(오버라이딩)해야한다.

        System.out.println("노곤하개 컹컹");
    }
}

package ex_abstract;

public class Cat extends Animal  {
   
    public Cat() {
        this.aType ="고양이과 동물";
    }

    @Override
    void sound() {
        // 추상클래스를 상속받는 자식 클래스들은 반드시 추상메서드를 상속받아 재정의(오버라이딩)해야한다.
        System.out.println("고양이 냐옹");
    }

}

package ex_abstract;

public class Main {

    public static void main(String[] args) {
        Dog dog = new Dog();
        Cat cat = new Cat();
        dog.move(); // 오버라이드된 메소드 호출 ==> 노곤하개
        cat.move(); // 추상클래스 메소드 호출 ==> 동물이 어슬렁 어슬렁 거린다.
        dog.sound(); // 자식 클래스의 구현된 메소드 호출 ==> 노곤하개 컹컹
        cat.sound(); // 자식 클래스의 구현된 메소드 호출 ==> 고양이 냐옹
    }
}


ㅇ 부모 클래스의 생성자를 호출하려면 super 키워드를 사용해야 한다.

package ex_abstract;

public abstract class Animal {
    // 추상 클래스(abstract class)란 하나 이상의 추상 메소드(abstract method)를 포함하는 클래스
    // 추상 메소드가 포함되었다면 클래스도 추상 클래스이므로 클래스명 앞에도 'abstract' 키워드를 붙여야 한다.
    public String name;
   
    public Animal() {
        super();
    }
    public Animal(String name) {
        this.name = name;
    }
    public void move() {
        System.out.println("동물이 어슬렁 어슬렁 움직인다.");
    }
    abstract void sound(); // 추상(abstract) 메서드는 선언만 있고 구현이 없는 메서드
}

package ex_abstract;

public class Cat extends Animal  {
   
    public Cat(String name) {
        super(name); // 부모 클래스의 생성자를 호출하려면 super 키워드를 사용해야 한다.
    }

    @Override
    void sound() {
        // 추상클래스를 상속받는 자식 클래스들은 반드시 추상메서드를 상속받아 재정의(오버라이딩)해야한다.
        System.out.println("고양이 냐옹");
    }

}

package ex_abstract;

public class Dog extends Animal {
   
    public Dog() {
        super(); // 부모 클래스의 생성자를 호출하려면 super 키워드를 사용해야 한다.
    }

    public Dog(String name) {
        super(name); // 부모 클래스의 생성자를 호출하려면 super 키워드를 사용해야 한다.
    }

    public void move() {
        System.out.println("노곤하개");
    }
   
    @Override
    void sound() {
        // 추상클래스를 상속받는 자식 클래스들은 반드시 추상메서드를 상속받아 재정의(오버라이딩)해야한다.
        System.out.println("노곤하개 컹컹");
    }
}

package ex_abstract;

public class Main {

    public static void main(String[] args) {
        Dog dog = new Dog("송백구");
        Cat cat = new Cat("조나비");
        dog.move(); // 오버라이드된 메소드 호출
        cat.move(); // 추상클래스 메소드 호출
        dog.sound(); // 자식 클래스의 구현된 메소드 호출
        cat.sound(); // 자식 클래스의 구현된 메소드 호출
        System.out.println("고양이의 이름은 : " + cat.name);
        System.out.println("진돗개의 이름은 : " + dog.name);
    }
}


'안드로이드 > Java 문법' 카테고리의 다른 글

공백으로 문자열 분리  (0) 2019.09.11
Java 제네릭(Generic)  (0) 2019.08.27
[Java] 다형성  (0) 2019.06.30
How to validate IP address with regular expression  (0) 2019.06.17
자바 클래스 개념 이해 예제  (0) 2019.05.27
블로그 이미지

Link2Me

,