추상?
추상클래스가 부모, 실체 클래스가 자식으로 구현되어 실체 클래스는 추상 클래스의 모든 특성(필드, 메소드) 를 물려받고, 추가적인 특성을 가질 수 있다
추상클래스의 용도
공통된 필드와 메소드의 이름을 통일할 목적
ex) Telephone 클래스에서는 owner, SmartPhone클래스에서는 User로 같은 기능을 다른이름으로 하는 경우에 Phone 추상클래스를 만들어 owner 필드로 통일
실체 클래스를 작성할 때 시간 절약
공통 필드와 메소드는 추상클래스에 모두 선언해두고 다른점만 실체 클래스에 선언하여 시간 절약
public abstract class Phone {
public String owner;
public Phone(String owner) {
this.owner = owner;
}
public void turnOn() {
System.out.println("폰 전원을 켭니다");
}
public void turnOff() {
System.out.println("폰 전원을 끕니다");
}
}
추상클래스 phone 생성
public class SmartPhone extends Phone{
public SmartPhone(String owner) {
super(owner);
}
public void internetSearch() {
System.out.println("인터넷 검색을 합니다");
}
}
추상클래스를 상속받은 스마트폰 생성. supwer(owner)로 Phone 생성자 호출
public class PhoneEx {
public static void main(String[] args) {
//추상 클래스는 객체를 직접 생성해서 사용 불가
//Phone phone = new Phone();
SmartPhone phone = new SmartPhone("홍길동");
phone.turnOn();
phone.internetSearch();
phone.turnOff();
}
}
추상 메소드와 재정의
메소드의 선언만 동일하고 실행 내용은 실체 클래스마다 달라야 하는 경우
ex) Animal 추상 클래스에서 sound()라는 메소드 ==> 동물들마다 다른 소리
public abstract class Animal {
public String kind;
public void breathe() {
System.out.println("숨을 쉽니다");
}
public abstract void sound();
}
Animal 추상클래스를 상속받아서 sound()를 재정의 했다
package a220712;
public class AnimalEx {
public static void main(String[] args) {
Dog dog = new Dog();
Cat cat = new Cat();
dog.sound();
cat.sound();
System.out.println("------");
//변수의 자동 타입변환
Animal animal = null;
//자동 타입 변환 및 재정의된 메소드 호출
animal = new Dog();
animal.sound();
//자동 타입 변환 및 재정의된 메소드 호출
animal = new Cat();
animal.sound();
System.out.println("------");
//메소드 다형성
//자동 타입변환
animalSound(new Dog());
//자동 타입변환
animalSound(new Cat());
}
//부모타입의 매개변수에 자식객체를 대입하여 메소드 다형성 적용
public static void animalSound(Animal animal) {
//재정의된 메소드 호출
animal.sound();
}
}
반응형
'개발 > JAVA' 카테고리의 다른 글
[Java] 중첩클래스와 중첩 인터페이스 (0) | 2022.07.13 |
---|---|
[Java] 인터페이스(Interface) (0) | 2022.07.12 |
[Java] 타입 변환과 다형성 (0) | 2022.07.11 |
[Java] 상속 (0) | 2022.07.11 |
[Java] Getter & Setter (0) | 2022.07.08 |