부모 타입의 참조 타입에다가 자식 타입의 참조 변수(실제 객체)를 가져다 붙이는것.
실제 객체는 자식이더라도, 타입이 부모로 선언되어 있어서 부모에서 정의된 기능만 사용가능
자식 클래스에서 부모의 특정 메소드 func() 를 오버라이딩해서 재정의한다면, 자식에서 오버라이딩된 func() 함수가 실행된다.
=> c++ 에서 가상함수가 동작하는 방식과 동일. 오버라이딩만 하면 자바에서는 가상 함수처럼 작동한다.
shape s = new Rect(); // shape : 부모 클래스 , Rect : 자식 클래스
boolean result = 객체 instance of 타입
추상 메소드 : 함수 선언은 되어 있지만 정의는 되어있지 않은함수
추상 클래스 : 클래스 안에 메소드를 선언을 하는데, 정의 내용이 없는 메소드(추상 메소드)를 가지는 클래스
상속을 받아간 자식 클래스에서 오버라이딩해서 내용을 정의한다.
추상 클래스를 상속받았는데 무조건 정의를 하거나, 또는 정의를 안한다면 그 자식 클래스 또한 추상 클래스로 만들어야 한다.
=> 추상 클래스의 2종류
1. 추상 메소드를 하나라도 가진 클래스
2. 추상 메소드가 하나도 없지만 abstract로 선언된 클래스
추상 클래스는 객체 생성 불가능. 단순히 다형성을 위한 기능이다.
추상 클래스를 상속받아, 추상 메소드를 구현하지 않으면 추상 클래스가 된다.
public abstrat class Animal{
public abstract void sound();
}
public class Dog extends Animal{
@Override
public void sound(){
System.out.println("멍멍");
}
}