- 추상 메서드
= abstract가 붙은 메서드
= 중괄호가 없는 메서드
= 메서드 기능 자체가 정의되지 않으며, 세미콜론(;)으로 끝남
abstract 리턴타입 메서드명();
- 추상 클래스
= abstract가 붙은 클래스
1. 일반 클래스를 상속해 오버라이딩 수행
-Animal 클래스의 cry()메서드는 내부에서 아무런 기능도 수행하지 않음
-Animal animal1 = new Cat()과 같이 다형적 표현을 사용했을때도 animal1.cry()의 형태로 cry()메서드를 호출하기 위해 사용
package Abstract1;
class Animal {
void cry() {} //부모 타입으로 cry()메서드를 호출하기 위해 선언(기능없음)
}
class Cat extends Animal {
void cry() {
System.out.println("야옹");
}
}
class Dog extends Animal {
void cry() {
System.out.println("멍멍");
}
}
public class Abstract1 {
public static void main(String[] args) {
//객체 생성
Animal animal1 = new Cat();
Animal animal2 = new Dog();
//메서드 호출
animal1.cry(); //야옹
animal2.cry(); //멍멍
}
}
2. 추상 클래스를 상속해 오버라이딩 수행
- 중괄호 자체가 없는 미완성 메서드인 추상메서드로 정의하는것이 효율적
- 추상 메서드를 1개이상 포함하고 있는 클래스는 반드시 추상 클래스로 정의해야함
- Animal 클래스의 cry()메서드를 추상 메서드로 만들면 Animal 클래스는 반드시 추상 클래스여야 함
- 추상클래스로 대체
abstract class Animal {
abstract void cry();
}
package Abstract1;
abstract class Animal {
abstract void cry();
}
class Cat extends Animal {
void cry() {
System.out.println("야옹");
}
}
class Dog extends Animal {
void cry() {
System.out.println("멍멍");
}
}
public class Abstract22 {
public static void main(String[] args) {
//객체 생성
Animal animal1 = new Cat();
Animal animal2 = new Dog();
//메서드 호출
animal1.cry();
animal2.cry();
}
}
'Java' 카테고리의 다른 글
12 - 2장 인터페이스 (0) | 2023.06.04 |
---|---|
12-1장 추상 클래스 (0) | 2023.06.02 |
11-1장 final 제어자 (0) | 2023.06.02 |
6-1 장 클래스와 객체의 개념 (2) | 2023.04.24 |
5-2장 문자열을 저장하는 String (0) | 2023.04.23 |