profile image

L o a d i n g . . .

추상?

추상클래스가 부모, 실체 클래스가 자식으로 구현되어 실체 클래스는 추상 클래스의 모든 특성(필드, 메소드) 를 물려받고, 추가적인 특성을 가질 수 있다

 

 

 

추상클래스의 용도

공통된 필드와 메소드의 이름을 통일할 목적 

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
복사했습니다!