자바 6-2주차. 다형성
다형성 (Polymorphism)
업캐스팅 = 자동 타입변환
-
부모 타입의 참조 타입에다가 자식 타입의 참조 변수(실제 객체)를 가져다 붙이는것.
-
실제 객체는 자식이더라도, 타입이 부모로 선언되어 있어서 부모에서 정의된 기능만 사용가능
-
자식 클래스에서 부모의 특정 메소드 func() 를 오버라이딩해서 재정의한다면, 자식에서 오버라이딩된 func() 함수가 실행된다.
=> c++ 에서 가상함수가 동작하는 방식과 동일. 오버라이딩만 하면 자바에서는 가상 함수처럼 작동한다.
- 바인딩 : 어떤 대상을 가지고 사용을할때ㅏ
- 정적 바이딩 / 동적 바인딩
shape s = new Rect(); // shape : 부모 클래스 , Rect : 자식 클래스
다운 캐스팅
- 업캐스팅 이후, 다시 자식 타입으로 변환할떄
- 업캐스팅때 사용하지 못하던 자식의 멤버들을 사용할 수 있게된다.
- 주의사항 : 먼저 자식 타입인지 확인후 강제 타입 실행할것 => instance of 사용!
boolean result = 객체 instance of 타입
추상 클래스 (abstract class)
-
추상 메소드 : 함수 선언은 되어 있지만 정의는 되어있지 않은함수
-
추상 클래스 : 클래스 안에 메소드를 선언을 하는데, 정의 내용이 없는 메소드(추상 메소드)를 가지는 클래스
-
상속을 받아간 자식 클래스에서 오버라이딩해서 내용을 정의한다.
-
추상 클래스를 상속받았는데 무조건 정의를 하거나, 또는 정의를 안한다면 그 자식 클래스 또한 추상 클래스로 만들어야 한다.
=> 추상 클래스의 2종류
1. 추상 메소드를 하나라도 가진 클래스
2. 추상 메소드가 하나도 없지만 abstract로 선언된 클래스
-
추상 클래스는 객체 생성 불가능. 단순히 다형성을 위한 기능이다.
-
추상 클래스를 상속받아, 추상 메소드를 구현하지 않으면 추상 클래스가 된다.
public abstrat class Animal{
public abstract void sound();
}
public class Dog extends Animal{
@Override
public void sound(){
System.out.println("멍멍");
}
}
Author And Source
이 문제에 관하여(자바 6-2주차. 다형성), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@msung99/자바-6-2주차.-다형성저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)