객체 지향 프로그래밍 - 상속
추상 클래스
한모로그
2023. 1. 19. 20:58
추상 클래스
- 객체를 생성할 수 있는 실체 클래스들의 공통적인 필드나 메소드를 추출해서 선언한 클래스
- 추상 클래스는 실체 클래스의 부모 역할. 공통적인 필드나 메소드를 물려받을 수 있음
출처, 이것이 자바다
추상 클래스 선언
- 클래스 선언에 abstract 키워드를 붙임
- new 연산자를 이용해서 객체를 직접 만들지 못하고 상속을 통해 자식 클래스만 만들 수 있다.
출처, 이것이 자바다
ackage ch07.sec10.exam01;
/*
추상클래스의 멤버로 사용할수 있는 것
- 구성요소 : 필드, 메소드, 생성자
- 특징
- 객체생성 불가능
- 상속은 가능.
*/
public abstract class Phone {
//필드 선언
String owner;
//생성자 선언
Phone(String owner) {
this.owner = owner;
}
//메소드 선언
void turnOn() {
System.out.println("폰 전원을 킵니다.");
}
void trunOff() {
System.out.println("폰 전원을 끕니다.");
}
}
package ch07.sec10.exam01;
public class SmartPhone extends Phone {
//생성자 선언
SmartPhone(String owner) {
super(owner); //Phone부모클래스의 생성자 호출
}
//메소드 선언
void internetSearch() {
System.out.println("인터넷 검색을 합니다.");
}
}
package ch07.sec10.exam01;
public class PhoneExample {
public static void main(String[] args) {
//추상 클래스는 객체생성 불가능하다.
//Phone phone = new Phone("홍길동"); // 에러발생
SmartPhone smartPhone = new SmartPhone("홍길동");
smartPhone.turnOn();
smartPhone.internetSearch();
smartPhone.trunOff();
}
}
추상 메소드와 재정의
- 자식 클래스들이 가지고 있는 공통 메소드를 뽑아내어 추상 클래스로 작성할 때, 메소드 선언부만 동일하고 실행 내용은 자식 클래스마다 달라야 하는 경우 추상 메소드를 선언할 수 있음
- 일반 메소드 선언과의 차이점은 abstract 키워드가 붙고, 메소드 실행 내용인 중괄호 { }가 없다.
출처, 이것이 자바다
출처, 이것이 자바다
package ch07.sec10.exam02;
/*
* 추상클래스
* 구성 요소 : 필드, 생성자, 메소드, 추상 메소드
* 특징 : 객체생성 불가능
상속 가능 : 추상메소드는 반드시 구현해야 한다.
*/
public abstract class Animal {
//메소드 선언
public void breathe() {
System.out.println("숨을 쉽니다.");
}
//추상 메소드
public abstract void sound();
}
package ch07.sec10.exam02;
public class Dog extends Animal {
@Override
public void sound() {
System.out.println("멍멍");
}
}
package ch07.sec10.exam02;
public class Cat extends Animal {
//Cat클래스가 일반클래스가 되기위해서는 추상 부모클래스의 추상메소드를 강제적으로 구현
//추상부모 클래스의 추상메소드를 정상적형태로 작업한 형태 : 구현
@Override
public void sound() {
System.out.println("야옹");
}
}
package ch07.sec10.exam02;
public class Pig extends Animal {
@Override
public void sound() {
System.out.println("꿀꿀");
}
}
package ch07.sec10.exam02;
import ch06.sec13.exam03.package1.A;
public class AbstractMethodExample {
public static void main(String[] args) {
Dog dog = new Dog();
dog.sound();
Cat cat = new Cat();
cat.sound();
Pig pig = new Pig();
pig.sound();
//매개변수의 다형성
animalSound(new Dog());
animalSound(new Cat());
animalSound(new Pig());
}
public static void animalSound(Animal animal) {
animal.sound();
}
}