추상클래스 생성
//abstract 선언으로 추상클래스 즉 개념을 만든다.
public abstract class KindaCat {
//abstract 선언으로 추상메소드 즉 행동 개념을 만든다.
public abstract void sound() ;
// 선언으로 이 메소드들이 보장된다는 확인을 받는다.<<<<<
}
자식객체
public class Tiger extends KindaCat{
//추상클래스 상속 객체는 반드시 메서드 오버라이딩으로 다형성을 위한 보장을 받아야한다.
@Override
public void sound() {
System.out.println("어흥");
}
public void hunt() {
System.out.println("사냥을합니다.");
}
}
public class Cat extends KindaCat{
//추상클래스 상속 객체는 반드시 메서드 오버라이딩으로 다형성을 위한 보장을 받아야한다.
@Override
public void sound() {
System.out.println("야옹");
}
}
메인메서드
public class Main {
public static void main(String[] args) {
// KindaCat kindaC = new KindaCat();
// kindaC.sound(); 컴파일에러, 추상클래스는 객체화할 수 없다.
Cat cat1 = new Cat();
cat1.sound();
Tiger tig1 = new Tiger();
tig1.sound();
tig1.hunt();//자식객체의 메서드 실행
//kindaC.hunt(); 컴파일에러, 부모객체에 정의된 것만 사용가능하다.
//자식타입의 프로모션
KindaCat kc = new Tiger();
//부모타입에 프로모션이 되어야 다시 자식타입으로 캐스팅이 가능하다.
//프로모션 과정없이 캐스팅이 들어간다면 부모타입은 자식객체에 대한 보장을 받지 못하므로 ClassCastException이 발생한다.
Tiger tig2 = (Tiger)kc;
}
//다형성의 구현<<<<<<<<<
private static void printCry(KindaCat c) {
//자식객체의 부모타입 프로모션을 보면, 안전하게 값을 대입할 수 있으며 다른 결과를 얻을 수도 있게된다.
c.sound();
}
}
'JAVA-Basic' 카테고리의 다른 글
7.익명클래스(AnonymousClass) (0) | 2020.07.10 |
---|---|
6.Interface와 다형성의 구현과정 (0) | 2020.07.10 |
4.상속(Inheritance)과 다형성의 구현과정 (0) | 2020.07.10 |
3.Overloading 과 접근제한(AccessModifier) (0) | 2020.07.10 |
2.Class와 멤버 (0) | 2020.07.10 |