본문 바로가기

Java

11-2장 abstract 제어자

- 추상 메서드 

 = 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